PHP正則表達(dá)式核心技術(shù)完全詳解 第4節(jié) php正則查找匹配處理函數(shù)使用心得與技巧

? ?極客小俊
?一個專注于web技術(shù)的80后
你不用拼過聰明人,你只需要拼過那些懶人 你就一定會超越大部分人!

php中兼容Perl的正則表達(dá)式處理函數(shù)
在我們說php系統(tǒng)自帶的正則處理函數(shù)之前,我們先要回憶一下在PHP中正則表達(dá)式的組成元素有哪些? 如下:
定界符號
原子
元字符、量詞
模式修正符
例如:一個匹配URL的正則表達(dá)式如下
?$url="/(https?|ftps?):\/\/(www|mail|news)\.([^\.\/]+)\.(com|org|net)/i";
應(yīng)用如下案例:
?$pattern="/(https?|ftps?):\/\/(www|mail|news)\.([^\.\/]+)\.(com|org|net)/i";
?$string='http://www.baidu.com';
?preg_match($pattern, $string,$arr);
?show($arr);
PHP中正則表達(dá)式與PHP正則處理函數(shù)結(jié)合使用 在PHP中正則表達(dá)式不能獨立使用、它只是一種用來定義字符串的規(guī)則模式、所以必須在、 相應(yīng)的正則表達(dá)式函數(shù)中應(yīng)用、才能實現(xiàn)相應(yīng)的功能! 例如 匹配、分割、查找、替換 所以有了正則,再加上PHP正則處理函數(shù)來使用這個正則表達(dá)式,才能對字符串進行 分割、匹配、查找及替換等工作。
把一個正則表達(dá)式用在分割的函數(shù)中, 則使用這個正則表達(dá)式對字符串進行分割 把一個正則表達(dá)式用在匹配的函數(shù)中, 則使用這個正則表達(dá)式對字符串進行匹配 把一個正則表達(dá)式用在替換的函數(shù)中, 則使用這個正則表達(dá)式對字符串進行替換 把一個正則表達(dá)式用在查找的函數(shù)中, 則使用這個正則表達(dá)式對字符串進行查找
小提示: 能使用字符串處理函數(shù)完成的功能,就不要使用正則表達(dá)式處理函數(shù) 性能問題
PHP查找匹配正則函數(shù):
preg_match(參數(shù)..) 作用: 在第一次匹配后將會停止搜索、返回正則的匹配次數(shù) ,如果匹配返回1,不匹配返回0 發(fā)生錯誤返回false! 參數(shù)列表如下: 參數(shù)1:正則表達(dá)式 參數(shù)2:字符串 參數(shù)3:自定義存放結(jié)果數(shù)組 參數(shù)4:獲取目標(biāo)字符串的開始下標(biāo)值常量, 參數(shù)5:搜索目標(biāo)字符的開始位置 案例如下:
?$string='www.baidu.com';
?$pattern="/baidu/i";
?preg_match($pattern, $string,$arr);
?show($arr);
preg_match_all(參數(shù)..) 作用:在匹配找到第一個后, 繼續(xù)從這個匹配位置搜索 直到把所有符合正則的都匹配出來 然后返回完整匹配數(shù)量次數(shù),如果返回0次 說明沒有匹配,發(fā)生錯誤返回false.! 參數(shù)列表如下: 參數(shù)1:正則表達(dá)式 參數(shù)2:字符串 參數(shù)3:自定義存放結(jié)果數(shù)組 參數(shù)4:以什么方式排列結(jié)果常量: PREG_SET_ORDER、 參數(shù)5:搜索目標(biāo)字符的開始位置 案例如下:
?$string='www.baidu.com www.sina.com www.bilibili.com';;
?$pattern="/www\..+?(\.com)/";
?preg_match_all($pattern, $string,$arr);
?show($arr);
查找匹配小案例
例1:查找字符串中出所有的URL 并且把所有URL地址加上紅顏色后打印輸出字符串。 如下
? $string='北京市朝陽區(qū)http://www.baidu.com中國區(qū)PHP開發(fā)
? ? ? ? ? ? ?北京市朝陽區(qū)http://www.baidu.com中國區(qū)PHP開發(fā)
? ? ? ? ? ? ?北京市朝陽區(qū)http://www.baidu.com中國區(qū)PHP開發(fā)
? ? ? ? ? ? ?北京市朝陽區(qū)http://www.baidu.com中國區(qū)PHP開發(fā)
? ? ? ? ? ? ?北京市朝陽區(qū)http://www.baidu.com中國區(qū)PHP開發(fā)
? ? ? ? ? ? ?北京市朝陽區(qū)http://www.baidu.com中國區(qū)PHP開發(fā)
? ? ? ? ? ? ?北京市朝陽區(qū)http://www.baidu.com中國區(qū)PHP開發(fā)
? ? ? ? ? ? ?北京市朝陽區(qū)http://www.baidu.com中國區(qū)PHP開發(fā)
? ? ? ? ? ? ?北京市朝陽區(qū)http://www.baidu.com中國區(qū)PHP開發(fā)
? ? ? ? ? ? ?北京市朝陽區(qū)http://www.baidu.com中國區(qū)PHP開發(fā)
? ? ? ? ? ? ?北京市朝陽區(qū)http://www.baidu.com中國區(qū)PHP開發(fā)
? ? ? ? ? ? ?北京市朝陽區(qū)http://www.baidu.com中國區(qū)PHP開發(fā)';
?
?//處理之前
?echo nl2br($string);
?echo '<hr>';
?
?$pattern="/(?:http[s]?|ftp?):\/\/(?:www|mail)\.[^\.\/]*\.(?:com|org|net)/i";
?preg_match_all($pattern, $string,$arr);
?$num=0;
?foreach ($arr[0] as $key=>$val){
? ? ?$string=str_replace($val, '<span style="color:red;">'.$val.'</span>', $string,$count);
? ? ?$num+=$count;
?}
?//處理之后
?echo nl2br($string).'<br>替換的次數(shù)是'.$num.'次';
例2:查找字符串中出所有的URL 并且把所有URL地址替換成超級鏈接然后打印輸出字符串, 如下:
?$string='北京市朝陽區(qū)http://www.sina.com中國區(qū)PHP開發(fā)
? ? ? ? ? ? ?北京市朝陽區(qū)http://www.baidu.com中國區(qū)PHP開發(fā)
? ? ? ? ? ? ?北京市朝陽區(qū)http://www.163.com中國區(qū)PHP開發(fā)
? ? ? ? ? ? ?北京市朝陽區(qū)http://www.wangm.com中國區(qū)PHP開發(fā)
? ? ? ? ? ? ?北京市朝陽區(qū)http://www.albb.com中國區(qū)PHP開發(fā)';
?
?//處理之前
?echo nl2br($string);
?echo '<hr>';
?
?
?function setURL($string){
? ? ?$pattern="/(?:http[s]?|ftp?):\/\/(?:www|mail)\.[^\.\/]*\.(?:com|org|net)/i";
? ? ?preg_match_all($pattern, $string,$arr);
? ? ?
? ? ?foreach($arr[0] as $k=>$v){
? ? ? ? ?$replace='<a href="'.$v.'">'.$v.'</a>';
? ? ? ? ?$string=str_replace($v, $replace, $string);
? ? ?}
? ? ?return nl2br($string);
?}
?
?echo '<hr>';
?//處理之后
?echo setURL($string);

如果喜歡話請 點贊 ?投幣 ?收藏 一鍵三連 ?
大家的支持就是我堅持下去的動力!
不要忘了?? 關(guān)注 ??哦!
