正則表達式

不論是什麼語言,都要涉及到字符串操作,這個時候正則表達式變凸現出了他的強大。這個星期便是學習了正則表達式的用法,由於大多是語法規則,也沒有進行試驗,又怕自己以後想用的時候忘記了,所以講他的語法記錄到博客,以便查閱。(當了一次搬運工,以下內容是摘自高洛峯兄弟連PHP學習中的課件)


 * 1. 正則表達式就是描述字符串排列模式的一種自定義語法規則。
 * 2. 如果可以使用字符串處理函數完成的任務,就不要使用正則
 * 3. 有一些複雜的操作,只能使用正則完成。
 * 
 * 正則表達式可以在很多計算機語言中應用
 *
 *  4. 正則表達式也稱爲一種模式表達式。
 *  5.正則表達式就是通過構建具有特定規則的模式,與輸入的字符信息比較。再進行分割、匹配、查找、替換等工作
 *   
 *    "/\<img\s*src=\".*?\"\/\>/"
 *
 *    一、正則表達式也是一個字符串
 *    二、由具有特殊意義的字符組成的字符串
 *    三、具有一點編寫規則,也是一種模式
 *    四、看作是一種編程語言(是用一些特殊字符,按規則編寫出一個字符串,形成一種模式---正則表達式)
 *
 *
 *    注意: 如果正則表達式,不和函數一起使用,則它就是一個字符串,如果將正則表達式放到到某個函數中使用, 才能發揮出正則表達式的作用。
 *
 *     用到分割函數中,就可以用這個正則去分割字符串
 *     用到替換函數中,就可以用這個正則去替換字符串
 *     ...
 *
 * 在PHP中給我們提供兩套正則表達式函數庫
POSIX 擴展正則表達式函數(ereg_)
Perl 兼容正則表達式函數(preg_)


這個函數功能一樣, 找一個處理字符串效率高的


注意:推薦使用Perl 兼容正則表達式函數庫(只學這一種)






學習正則表達式時,有兩方面需要學習:


一、正則表達式的模式如何編寫
語法:
1. 定界符號  // 
除了字母、數字和正斜線\ 以外的任何字符都可以爲定界符號
| |
/ /
{ }
! !

沒有特殊需要,我們都使用正斜線作爲正則表達式的定界符號




2. 原子   img \s . 
注意:原子是正則表達式的最基本組成單位,而且必須至少要包含一個原子
只要一個正則表達式可以單獨使用的字符,就是原子


1. 所有打印(所有可以在屏幕上輸出的字符串)和非打印字符(看不到的)
2. \. \* \+ \? \( \<\> 如果所有有意義的字符,想作爲原子使用,統統使用 ”\“轉義字符轉義 m
" \ "轉義字符可以將有意的字符轉成沒意義的字符,還可以將沒意義的字符轉爲有意義的字符
3. 在正則表達式中可以直接使用一些代表範圍的原子
\d  : 表示任意一個十進制的數字       [0-9]
\D  : 表示任意一個除數字這外的字符   [^0-9]
\s  : 表示任意一個空白字符,空格、\n\r\t\f   [\n\r\t\f ]
\S  : 表示任意一個非空白                     [^\n\r\t\f ]
\w  : 表示任意一個字 a-zA-Z0-9_              [a-zA-Z_]
\W  : 表示任意一個非字, 除了a-zA-Z0-9_以外的任意一個字符  [^a-zA-Z0-9_]
4. 自己定義一個原子表[], 可以匹配方括號中的任何一個原子
[a-z5-8]
[^a-z] 表示取反, 就是除了原子表中的原子,都可以表示(^必須在[]內的第一個字符處出現)


.




3. 元字符  * ? 
元字符是一種特殊的字符,是用來修飾原子用的,不可以單獨出現
*  : 表示其前的原子可以出現 0次、1次、或多次                       {0,}
+  : 表示其前的原子可以出現1次 或多次, 不能沒有最少要有一個       {1,}
?  : 表示其前面的原子可以出現0次或1次, 有只能有一次,要麼沒有    {0,1}
{} : 用於自己定義前面原子出現的次數
{m}   //m表示一個整數, {5}表示前面的原子出現5次
{m,n}  //m和n表示一個整數,{2,5} m要小於n, 表示前面出現的原子,最少m次,最多n次,包括m和n次
{m,}   //表示前面的原子最少出現m次,最多無限

.   : 默認情況下,表示除換行符外任意一個字符
^   : 直接在一個正則表達式的第一個字符出現,則表達必須以這個正則表達式開始
$   : 直接在一個正則表達式的最後一個字符出現,則表達必須以這個正則表達式結束
|   : 表示或的關係 , 它的優先級號是最低的, 最後考慮它的功能


\b  : 表示一個邊界
\B  : 表示一個非邊界


()  : 重點


一、 () 作用: 是作爲大原子使用
二、 改變優先級,加上括號可以提高優先級別
三、 作爲子模式使用, 正則表達式不先對一個字符串匹配一次, 全部匹配作爲一個大模式,放到數組的第一個元素中,每個()是一個子模式按順序放到數組的其它元素中去。
四、可以取消子模式,就將()作爲大原子或改變優先級使用, 在括號中最前面使用"?:"就可以取消這個()表示的子模式
五、反向引用, 可以在模式中直接將子模式取出來,再作爲正則表達式模式的一部分, 如果是在正則表達式像替換函數preg_replace函數中, 可以將子模式取出, 在被替換的字符串中使用


\1 取第一個子模式、 \2取第二個子模式, ....  \5 (注意是單引號還是雙引號引起來的正則)


"\\1"
'\1'

${1} ${2}


\* \+ \. \?



() (?:) []
* + ? {}
^  $   \b
|


4. 模式修正符號 i u
"/ /模式修正符"
1. 就是幾個字母
2. 可以一次使用一個,每一個具一定的意義, 也可以連續使用多個
3. 是對整個正則表達式調優使用, 也可以說是對正則表達式功能的擴展


"/abc/" 只能匹配小寫字母 abc
"/abc/i" 可以不區分大小寫匹配 ABC abc Abc ABc AbC


i : 表示在和模式進行匹配進不區分大小寫
m : 默認情況,將字符串視爲一行  ^  $ 視爲多行後,任何一行都可以以正則開始或結束
s : 如果沒有使用這個模式修正符號時, 元字符中的"."默認不能表示換行符號,將字符串視爲單行
x : 表示模式中的空白忽略不計
e : 正則表達式必須使用在preg_replace替換字符串的函數中時纔可以使用(講這個函數時再說)
A :
Z :
U : 正則表達式的特點:就是比較”貪婪“  .* .+ 所有字符都符合這個條件


一種使用模式修正符號 U 
加一種是使用?完成  .*?  .+?


如果兩種方式同時出現又開啓了 貪婪模式  .*? /U

"/\<img\s*src=\".*?\"\/\>/iU"
"#\<img\s*src=\".*?\"\/\>#iU"


/原子和元字符/模式修正符號   / 爲定界符號 (有一些語言是不需要這個定界符號)


有點語言中不支持模式修正符號 javascript



用戶名不能爲空 /^\S+$/
email 
url 
電話


將一個網站中的所有圖片取出 
將一個網站的所有商品取出, 




二、學習正則表達式的強大處理函數
preg_match();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章