PHP正則表達式核心技術徹底詳解 第4節 php正則查找匹配處理函數使用心得與技巧

做者:極客小俊 一個專一於web技術的80後
我不用拼過聰明人,我只須要拼過那些懶人 我就必定會超越大部分人!
CSDN@極客小俊,原創文章, B站技術分享
B站視頻 : 👉 Bilibili.com 👈
我的博客: 👉 cnblogs.com 👈php

在這裏插入圖片描述

php中兼容Perl的正則表達式處理函數


在咱們說php系統自帶的正則處理函數以前,咱們先要回憶一下在PHP中正則表達式的組成元素有哪些? 以下:web

  1. 定界符號
  2. 原子
  3. 元字符、量詞
  4. 模式修正符

例如:一個匹配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:搜索目標字符的開始位置
案例以下:url

$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:搜索目標字符的開始位置
案例以下:spa

$string='www.baidu.com www.sina.com www.bilibili.com';
$pattern="/www\..+?(\.com)/";
preg_match_all($pattern, $string,$arr);
show($arr);

查找匹配小案例

例1:查找字符串中出全部的URL 而且把全部URL地址加上紅顏色後打印輸出字符串。 以下code

$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);

在這裏插入圖片描述

"點贊" "評論" "收藏"

你們的支持就是我堅持下去的動力!

若是以上內容有任何錯誤或者不許確的地方,歡迎在下面 👇 留個言指出、或者你有更好的想法,歡迎一塊兒交流學習
相關文章
相關標籤/搜索