Regex
作用:
1,分割
2,匹配
3,尋找
4,替換
一個Regex至少包含一個原子
Regex就是一個字串
什麼時候使用正則。
1,表單匹配
2,URl的重寫,路由重寫
3,小偷採集
如何使用正則表達PHP
PCRE庫Regex庫,大多數語言都在使用,通用
POSIX庫
Regex的文法規則和組成部分
1,定界符
兩個正斜線//,使用者把需要匹配的模式放在定界符之間即可
除了字母,數字,斜線\之外的任何字元都可以作為定界符
# | 。也是可以當做定界符的
2,原子
原子是Regex最基本的組成單元
1,一般字元作為原子 如a-z,A-Z 0-9等
2,一些特殊字元和轉義後的元字元作為原子
如,索引的標點符號,但語句特殊意義的符號需要轉義後才能作為原子,
如:\* \+ \. 等
3,一些非列印字元作為原子 如\f \n \r \t \v \cx
4,使用通用字元類型作為原子,如 \d \D \w \W \s \S
5, 自訂原子表([])作為原子 如'/[apj]sp/' '/[^apj]sp/'
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>正則是匹配</title></head><body><form action=""><input type="text" name="zz"><input type="submit" value="Regex匹配"></form></body></html><?php header("Content-type: text/html; charset=utf-8"); // $pattern="/abc/";// //如果匹配的到返回1,匹配不到返回0// //=======================原子===================//// $pattern="/abc/";//普通的原子// $patten="/\./"; //特殊的原子需要反斜線的轉義// $pattern="/\n/"; //匹配非列印字元// /*=============6種通用原子開始===============*/// $pattern="/\d/";//匹配任意一個數字// $pattern="/\D/";//陪陪除了數字之外的任一字元// $pattern="/\w/";//匹配數字,大小寫字母,底線// $pattern="/\W/";//匹配除了數字,字母底線的任一字元// $pattern="/\s/";//匹配空白字元// $pattern="/\S/";//匹配除了空白符以外的任一字元// /*=============6種通用原子結束===============*/// /*=============15種元字元開始===============*///$pattern="/go*gle/"; //*代表匹配前面的原子0次,1次或者多次//$pattern="/go+gle/";//+代表匹配前面的原則至少一次或者多次//$pattern="/go?gle/";//?智能匹配前面的原子0次或1次//$pattern="/./";//.匹配除了分行符號以外的任意一個字元//$pattern="/a|b/";//或者匹配,匹配a或者b//$pattern="/go{3}gle/"; //{n}匹配n次,可以匹配前面的n次原子,例如gooole可以匹配,如果goooogle是不能匹配的//$pattern="/go{3,}gle/"; //{n,}可以匹配上面的原子大於n的//$pattern="/go{1,3}gle/"; //{n,}可以匹配上面的原子大於n的//$pattern="/^我們是好人/"; //^符號必須是從頭開始,否則全文有也是輸出錯誤,不加^的話預設是全文匹配,//$pattern="/我們是好人$/"; //$ 必須以我們是好人結尾//$pattern="/^我們是好人$/";//開頭^和$結尾,必須是全部匹配,原子相等//$pattern="/^我們是.*好人$/";//開頭^和$結尾,中間可以是任意的字元//$pattern="/\bis/"; // \b是必須以每個單詞是is開頭//$pattern="/is\b/";//必須是以is結尾//$pattern="/\bis\b/";//必須是以is開頭和結尾//$pattern="/\Bis/"; //is必須不能開頭//$pattern="/is\B/"; //不能以is結尾//$pattern="/[abc]/";//相當於a或b或c,使用者輸入a或b或c都可以匹配//$pattern="/[^abc]/";//除了a,b,c都可以匹配//$pattern="/ab|cd/";//可以匹配ab或者cd,相當於|//$pattern="/ab|cd:/";//可以匹配到ab或者cd://$pattern="/(ab|cd):/";//可以匹配到ab:或者是cd: ,後向引用或者反向引用//$pattern="/<b>.*</b>/";//匹配所有的<b>所有的內容</b>,這是貪婪模式//貪婪模式,第一個<b>到最後一個</b>的所有內容,包含<b>之間的所有的<b></b></b>//$pattern="/<b>.*?<\/b>/";//.*?取消貪婪模式,輸出第一個<b></b>標籤之間的內容// $str="<b>hao</b>are you<b></b>";//$pattern="/[.]/";//單純的.沒有其他含義//$pattern="/[.*]/"; //裡面的.*等特殊字元會失去原有的意義,只要是帶有.或*的字串都可以匹配成功//匹配中文 $pattern="/[^x00-xff]/";// /*=============15種元字元結束===============*/// /*=============模式修正符===============*/// $pattern="/[a-z]/i";//可以匹配a-z的大小寫都可以//$pattern="/ab/i";//可以匹配ab的大小寫都可以//$pattern="/^ab/m";//可以在每一行開始匹配,是否ab開頭,^是以什麼開頭,多行匹配//類似$str="a\nb"; //$pattern="/./s";//.匹配除了分行符號以外的任意一個字元,s是修正了.的分行符號//$pattern="/a b c/x";// 模式中的空白忽略不計,除非他已經轉義,輸入abc是可以匹配成功的,但是a b c匹配不成功//在Regex中最後添加e,e是eval()的縮寫//$pattern="/<b>.*?<\/b>/u" //U是貪婪模式,備忘:.*。+U是取消取消貪婪模式=貪婪模式//$pattern="/abc$/";//預設情況下,是匹配以abc結尾的字串,但是如果//$str="dwedwedewabc\n";這樣也是會匹配成功的,因為\n是分行符號//$pattern="/abc$/D"; 加D是更加嚴謹,換行的話直接報錯的// /*=============模式修正符結束===============*/// /*=============正則式最佳化方面===============*///例如: ?:http|https|ftp 這樣的話在產生的數組會沒有這一項//減少記憶體佔用////在字串中運行php代碼://在Regex中最後添加e,e是eval()的縮寫//例如$pattern="/http:\/\/\w+\.\w+\.(com|cn)/e";//然後在preg_replace()中更改//$str=preg_replace($pattern,'\'<a href="$0">\'.strtoupper("$0").\'</a>\'', $str);//上面的樣本是將需要替換的值自動變成大寫// /*=============正則式最佳化方面結束============*//**************preg_match函數開始*******///preg_match($pattern,$str,$arr);//執行一次返回一次匹配結果//需要遍曆出結果/**************preg_match函數結束*******//**************preg_match_all函數開始*******///preg_match_all($pattern,$str,$arr);//返回一個數組//可以將全部的匹配結果匹配出來//如果這是列印var_dump($arr)會輸出匹配後的數組//如果這是列印var_dump($arr[0])會輸出匹配後的內容/**************preg_match_all函數結束*******//**************preg_replace函數開始,推薦使用,重要。。*******///preg_replace($pattern,'替換內容',$arr); //返回直接替換後字串//(反向)後向引用就是將之前查詢出的內容在preg_replace()的第二個函數直接引用//因為第二個函數載入替換內容,可以直接放入$0或者\\0//$0和\\0是根據正則式匹配前置出來的內容//$0和\\0其實是數組,可以自己列印一下/**************preg_replace結束******************************///另外的正則函數//preg_grep//preg_split$str=$_GET['zz']; //測試接收if(preg_match($pattern,$str,$arr)){echo "<font color='green'>恭喜你,匹配成功</font><br/>";echo "<pre>";var_dump($arr);echo "</pre>";}else{echo "<font color='red'>沒有匹配到</font>";}