作者:極客小俊 一個專注于web技術的80后
我不用拼過聰明人,我只需要拼過那些懶人 我就一定會超越大部分人!
CSDN@極客小俊,原創文章, B站技術分享
B站視頻 : ?? Bilibili.com ??
個人博客: ?? cnblogs.com ??

php中兼容Perl的正則運算式處理函式
在我們說php系統自帶的正則處理函式之前,我們先要回憶一下在PHP中正則運算式的組成元素有哪些? 如下:
- 定界符號
- 原子
- 元字符、量詞
- 模式修正符
例如:一個匹配URL的正則運算式如下
$url="/(https?|ftps?):\/\/(www|mail|news)\.([^\.\/]+)\.(com|org|net)/i";
應用如下案例:
$pattern="/(https?|ftps?):\/\/(www|mail|news)\.([^\.\/]+)\.(com|org|net)/i";
$string='http://www.baidu.com';
preg_match($pattern, $string,$arr);
show($arr);
PHP中正則運算式與PHP正則處理函式結合使用
在PHP中正則運算式不能獨立使用、它只是一種用來定義字串的規則模式、所以必須在、
相應的正則運算式函式中應用、才能實作相應的功能! 例如 匹配、分割、查找、替換
所以有了正則,再加上PHP正則處理函式來使用這個正則運算式,才能對字串進行
分割、匹配、查找及替換等作業,
把一個正則運算式用在分割的函式中, 則使用這個正則運算式對字串進行分割
把一個正則運算式用在匹配的函式中, 則使用這個正則運算式對字串進行匹配
把一個正則運算式用在替換的函式中, 則使用這個正則運算式對字串進行替換
把一個正則運算式用在查找的函式中, 則使用這個正則運算式對字串進行查找
小提示: 能使用字串處理函式完成的功能,就不要使用正則運算式處理函式 性能問題
PHP查找匹配正則函式:
preg_match(引數..)
作用: 在第一次匹配后將會停止搜索、回傳正則的匹配次數 ,如果匹配回傳1,不匹配回傳0
發生錯誤回傳false!
引數串列如下:
引數1:正則運算式
引數2:字串
引數3:自定義存放結果陣列
引數4:獲取目標字串的開始下標值常量,
引數5:搜索目標字符的開始位置
案例如下:
$string='www.baidu.com';
$pattern="/baidu/i";
preg_match($pattern, $string,$arr);
show($arr);
preg_match_all(引數..)
作用:在匹配找到第一個后, 繼續從這個匹配位置搜索 直到把所有符合正則的都匹配出來
然后回傳完整匹配數量次數,如果回傳0次 說明沒有匹配,發生錯誤回傳false.!
引數串列如下:
引數1:正則運算式
引數2:字串
引數3:自定義存放結果陣列
引數4:以什么方式排列結果常量: PREG_SET_ORDER、
引數5:搜索目標字符的開始位置
案例如下:
$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='北京市朝陽區http://www.baidu.com中國區PHP開發
北京市朝陽區http://www.baidu.com中國區PHP開發
北京市朝陽區http://www.baidu.com中國區PHP開發
北京市朝陽區http://www.baidu.com中國區PHP開發
北京市朝陽區http://www.baidu.com中國區PHP開發
北京市朝陽區http://www.baidu.com中國區PHP開發
北京市朝陽區http://www.baidu.com中國區PHP開發
北京市朝陽區http://www.baidu.com中國區PHP開發
北京市朝陽區http://www.baidu.com中國區PHP開發
北京市朝陽區http://www.baidu.com中國區PHP開發
北京市朝陽區http://www.baidu.com中國區PHP開發
北京市朝陽區http://www.baidu.com中國區PHP開發';
//處理之前
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>替換的次數是'.$num.'次';
例2:查找字串中出所有的URL 并且把所有URL地址替換成超級鏈接然后列印輸出字串, 如下:
$string='北京市朝陽區http://www.sina.com中國區PHP開發
北京市朝陽區http://www.baidu.com中國區PHP開發
北京市朝陽區http://www.163.com中國區PHP開發
北京市朝陽區http://www.wangm.com中國區PHP開發
北京市朝陽區http://www.albb.com中國區PHP開發';
//處理之前
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);

"點贊" "評論" "收藏"轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/149588.html
標籤:PHP
