標籤:自己 blog 找女朋友 編輯功能 函數 color 底線 替換 表示
一、生活當中的Regex:
a)Notepad++、word等這些具有編輯功能的軟體,都具有一個尋找、替換的功能,這個功能,其實就屬於正則模式的一種匹配、替換;包括windows當中可以實現的尋找,也是應用的正則模式比對;包括一些搜尋、匹配的軟體也是使用的正則模式規則來寫的!
二、PHP當中的正則:
a)定義:它是用於對使用一種模式,對一段字串進行的尋找、替換、匹配、分割的作用
三、正則模式:
a)其實就是一段特殊的字串!我們可以使用這一段特殊的字串對另一段字串進行的一系列操作!
b)模式:
i.單身模式:找女朋友,學習,充實自己!
ii. 戀愛模式:此刻仉浩焱和他的女朋友在熱戀期,此時他們的智商都為0
iii.婚姻模式:此刻仉浩焱和他的女朋友結婚啦,從此過上了幸福的生活!
iv.偵查模式:此時他媳婦的智商僅次於愛因斯坦,她會從仉浩焱的蛛絲馬跡發現海波是不是偷腥了~~(頭髮絲兒、身上是否有香水味、是否有口紅…)
四、正則的分類:
a)POSIX規則:
i.已棄用,(功能、使用頻率)比較落後,因此棄用
b)PCRE規則:
i.正在使用!
五、如何來使用Regex?
a)正則的定界符:
b)原子:
c)元字元:
d)模式修正符:
e)配合正則函數來進行使用!
i.Preg_match() 匹配一次
ii.Preg_match_all() 匹配所有
六、定界符:
a)和定義字串一樣,我們定義正則也需要使用正則的定界符
b)“/正則模式/” ,正則當中的定界符可以是除了字母、數字、具有特殊含義符號之外的所有內容,都可以作為定界符
c)注意:通常情況下,我們都會使用雙斜線作為正則模式的定界符,這是一個不成文的規定!
七、 原子:是正則模式當中最小的單位!
a)一般字元:
1.a-z:之中的所有小寫字母,都是一個原子
2.A-Z:之中的所有大寫字母,都是一個原子
3.0-9:之間的所有阿拉伯數字,都屬於一個原子
b)原子表:
1.[]:一個方括弧當中所有的內容之間的關係都是或的關係,而且一個原子表永遠代表一個原子!
2.[abcdfg]:可以寫單個原子
3.[a-z]:任一一個小寫字母
4.[A-Z]:任一一個大寫字母
5.[0-9]:任一一個阿拉伯數字
6.[a-g]:任一一個從a-g之間的小寫字母
7.原子表中如果有一個 ‘-’代表了一個範圍!
c)特殊的逸出字元:
1.\d:相當於[0-9],代表了任意一個阿拉伯數字
2.\D:代表了任一一個除了阿拉伯數位內容
3.\w:代表了任意一個字母、數字、底線的內容
4.\W:代表了除了任意的字母、數字、底線的內容
d)非列印字元:
1.\r:斷行符號
2.\n:換行
3.\t:定位字元
e)正則當中擁有特殊含義的字元:
1.*、.、+、?、\,當我們想要使用正則模式去匹配這些具有特殊含義的字元時,我們需要在它前方加上逸出字元 \
八、元字元:在Regex當中,那些擁有特殊含義的字元,就是元字元
a)[]:原子表,特點:原子表中的原子之間的關係是或,一個原子表代表一個原子
b){n}:匹配次數:花括弧之前的原子必須出現n次
c){n,}:匹配次數:花括弧之前的原子至少出現n次,沒有上限
d){n,m}:匹配次數:花括弧之前的原子至少出現n次,最多出現m次
e).:代表任意一個原子
f)*:匹配次數:代表*號之前的原子是任意長度,相當於{0,}
g)+:匹配次數:代表+號之前的原子是至少一次,沒有上限,相當於{1,}
h)?:匹配次數:代表?號之前的原子可有可無,相當於{0,1}
i)^:兩層含義
i.如果將其放在正則模式左定界符後,則代表以^之後的原子開頭
ii.如果將其放在原子表中最開頭,[^0-9],則代表原子表中的內容取反
j)$:如果將其放在正則模式右定界符前,則代表以$符之前的原子結尾
i.注意:如果配合使用上箭頭^和貨幣符號$,則代表精確匹配,代表我們匹配的字元源必須符合他們中間的正則模式的內容!
k)():三層含義:
i.提升優先順序
ii.子儲存
iii.重複使用模式單元
l)|:或者
九、 關於正則模式的特殊運用:
a)貪婪匹配
1 // 定義字元源 2 $stu = ‘#仉浩焱##許超##張舒##大嘴##小花##偉哥#‘; 3 4 // 定義正則模式(這屬於貪婪匹配) 5 $patt = "/#.*#/"; 6 var_dump($res); 7 8 //結果 9 array (size=1)10 0 => 11 array (size=1)12 0 => string ‘#仉浩焱##許超##張舒##大嘴##小花##偉哥#‘ (length=51)13 14 // 定義正則模式(拒絕貪婪匹配)15 $patt = "/#.*?#/";16 17 // 使用正則函數來進行匹配18 preg_match_all($patt,$stu,$res);19 var_dump($res);20 21 //結果22 array (size=1)23 0 => 24 array (size=6)25 0 => string ‘#仉浩焱#‘ (length=11)26 1 => string ‘#許超#‘ (length=8)27 2 => string ‘#張舒#‘ (length=8)28 3 => string ‘#大嘴#‘ (length=8)29 4 => string ‘#小花#‘ (length=8)30 5 => string ‘#偉哥#‘ (length=8)
b) 子儲存
c)重複使用模式單元
十、正則當中的函數:
a)Preg_match()、執行一個Regex匹配
1 //定義字元源 2 $str = "abcdefgabcdefg"; 3 4 //定義正則模式 5 $patt = "/a/"; 6 7 echo preg_match($patt,$str,$res); 8 var_dump($res); 9 //array (size=1)10 //0 => string ‘a‘ (length=1)
b) Preg_match_all()、 執行一個全域Regex匹配
1 //定義字元源 2 $str = "abcdefgabcdefg"; 3 4 //定義正則模式 5 $patt = "/a/"; 6 7 //匹配所有 8 preg_match_all($patt,$str,$res); 9 var_dump($res);10 11 //array (size=1)12 0 => 13 array (size=2)14 0 => string ‘a‘ (length=1)15 1 => string ‘a‘ (length=1)
c) Preg_grep(); 返回匹配模式的數組條目
d)Preg_replace();執行一個Regex的搜尋和替換
e)Preg_split();通過一個Regex分隔字串
十一、正則當中的模式修正符:
a)i:不區分大小寫
1 //模式修正符i:表示正則匹配不區分大小寫 2 $str = "abcdefgABCDEFG"; 3 $patt = "/[a-z]/i"; 4 preg_match_all($patt,$str,$res); 5 var_dump($res); 6 7 //結果 8 array (size=1) 9 0 => 10 array (size=14)11 0 => string ‘a‘ (length=1)12 1 => string ‘b‘ (length=1)13 2 => string ‘c‘ (length=1)14 3 => string ‘d‘ (length=1)15 4 => string ‘e‘ (length=1)16 5 => string ‘f‘ (length=1)17 6 => string ‘g‘ (length=1)18 7 => string ‘A‘ (length=1)19 8 => string ‘B‘ (length=1)20 9 => string ‘C‘ (length=1)21 10 => string ‘D‘ (length=1)22 11 => string ‘E‘ (length=1)23 12 => string ‘F‘ (length=1)24 13 => string ‘G‘ (length=1)
b) s:表示忽略分行符號
//模式修正符s:表示正則匹配忽略分行符號$str = " <li>張三</li> <li>李四 </li> <li>王五</li> ";//不加模式修正符s$patt = "/<li>.*?<\/li>/";preg_match_all($patt,$str,$res);var_dump($res);//結果array (size=1) 0 => array (size=2) 0 => string ‘<li>張三</li>‘ (length=15) 1 => string ‘<li>王五</li>‘ (length=15)//加模式修正符s$patt = "/<li>.*?<\/li>/s";preg_match_all($patt,$str,$res);var_dump($res);//結果array (size=1) 0 => array (size=3) 0 => string ‘<li>張三</li>‘ (length=15) 1 => string ‘<li>李四 </li>‘ (length=20) 2 => string ‘<li>王五</li>‘ (length=15)
c) U:表示拒絕貪婪匹配
1 //模式修正符U:表示正則拒絕貪婪匹配 2 $str = "#海波##鴻澤##柏岩##景飛#"; 3 $patt = "/#.*#/U"; 4 preg_match_all($patt,$str,$res); 5 var_dump($res); 6 7 //結果 8 array (size=1) 9 0 => 10 array (size=4)11 0 => string ‘#海波#‘ (length=8)12 1 => string ‘#鴻澤#‘ (length=8)13 2 => string ‘#柏岩#‘ (length=8)14 3 => string ‘#景飛#‘ (length=8)
十二、 關於正則和字串函數:
a)正則函數就相當於大炮:
b)字串函數就相當於弓箭:
【php】Regex