標籤:pattern 擷取 img 刪除 res ref 過濾 文字 依次
1. Regex的主要作用是:分割、匹配、尋找、替換
2. Regex中包括的元素:原子(一般字元:a-z A-Z 0-9 、原子表、逸出字元),元字元(有特殊功能的字元),模式修正符(系統內建部分字元 i 、m、S、U…)
3. 逸出字元:\d包含所有數字[0-9],\D除所有數字外[^0-9],\w包含所有字元(大小寫英文字母、底線、數字) [a-zA-Z_0-9],\W除所有字元(大小寫英文字母、底線、數字)外 [^a-zA-Z_0-9],\s包含空白地區如斷行符號、換行、分頁等 [\f\n\r]。
4. * 匹配任意次;+ 匹配1次或多次;?匹配0次或1次;.匹配任意次但不包含斷行符號換行;|選擇匹配(或者);^匹配開頭(方括弧中表示非);$匹配尾部;{m}匹配前一個內容的重複次數為m次;{m,}匹配前一個內容的重複次數大於等於m次;{m,n}匹配前一個內容的重複次數m次到n次;( ) 合并整體匹配,並放入記憶體,可使用\1 \2…依次擷取。
5. 模式修正符: 【/正則/U 】 小寫i:不區分大小寫;小寫m:匹配首內容或尾內容時採用多行識別匹配;小寫s:將轉義斷行符號取消視為單行匹配;小寫x:忽略正則中的空白;大寫A:強制從頭開始匹配;大寫D:強制$匹配尾部無任何內容;大寫U:禁止貪婪匹配,只跟蹤到最近的一個匹配符並結束,常用在採集程式。
6. PerlRegex函數:
① preg_grep($mode,$str) //匹配尋找,返回一個數組;
② preg_match($mode,$str,$return) //在字串中尋找匹配項,返回一個數組。
③ preg_match_all($mode,$str,$return [,int flags])
④ preg_split($mode,$str [,int limit 切割多少次 [,int flags] ] ) //使用Regex分割字串,並將結果以數組的形式返回(類似explode)。
⑤ preg_replace($mode,$replacement,$str [,int limit 匹配多少次])//尋找和替換子字串(類似str_replace)
⑥ preg_quote($str)//在每個Regex的特殊字元前面加入一個逸出字元(反斜線“\”),Regex的特殊字元包括:.\\+*?[^]$(){}=!<>|:
◆ 【經典收藏的Regex】:
1.刪除一對中括弧內的內容:$str = "abc[url]123[/url]"; $str = preg_replace(‘/\[url\S*\[\/url\]/‘, ‘‘, $str); echo $str; //輸出:abc123
2.匹配網頁原始碼中的圖片路徑:$pattern="/<[img|IMG].*?src=[\‘|\"](.*?(?:[\.gif|\.jpg]))[\‘|\"].*?[\/]?>/"; preg_match_all($pattern,$str,$match); //$match[1][0]就是圖片的路徑
3.擷取當前頁面的所有超連結:$pat = ‘/<a(.*?)href="(.*?)"(.*?)>(.*?)<\/a>/i‘; preg_match_all($pat, $str, $m); //print_r($m);
4.根據網頁原始碼的某個div提取需要的數字:$pat = ‘/<div class="allnum">.+?<\/div>/‘; preg_match_all($pat, $str, $res); preg_match_all(‘/\d+/‘, $res[0][0], $nums); //print_r($nums[0][0]);
5.PHP 匹配多對中括弧中的內容:$string = "這是[3]def[25]我的[26] "; preg_match_all(‘/\[([a-z0-9]+)\]/‘, $string, $matches); //print_r($matches);
6.匹配所有大括弧裡面的內容: preg_match_all("/{(.*)}/U","sdf{title}dghdg{author} ",$arr); print_r($arr);
7.過濾網頁上的所有script標記及其內容:[JS]$pat = "‘<script[^>]*?>.*?</script>‘si";[HTML]$pat = "‘<[\/\!]*?[^<>]*?>‘si";[空白字元]$pat = "‘([\r\n])[\s]+‘"; (替換)$res = preg_replace($pat, "", $str);
8.匹配郵件:$pregEmail = "/([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?/i"; $res = preg_match($pregEmail,$email);
9.匹配手機號:$preg = "/^1(3|5|8)\d{9}$/"; $res = preg_match($preg,$mobile);
PHPRegex的使用