久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

PHP中的正則表達式實例詳解

在編程里基本都會用到正則表達式來處理數據,那么下面就具體在PHP中怎么運用吧,本文通過具體的實例,給大家講解了PHP中正則表達式的使用方法。

最近使用 PHP 寫了一個應用,主要是正則表達式的處理,趁機系統性的學習了相應知識。
這篇文章的寫作方式不是講理論,而是通過具體的例子來了解正則,這樣也更有實踐性,在此基礎上再去看正則表達式的基本概念會更有收獲。

禁止分組的捕獲

在正則中分組很有用,可以定義子模式,然后可以通過后向引用來引用分組的內容,但是有的時候僅僅想通過分組來進行范圍定義,而不想被分組來捕獲,通過一個例子就能明白:

$str = "http://www.google.com";
$preg= "/http:\/\/\w+\.\w+.(?:net|com|cn)+/is";
$preg2= "/http:\/\/\w+\.\w+.(net|com|cn)+/is";
preg_match($preg,$str,$arr);
preg_match($preg2,$str,$arr2);

當模式中出現?:表示這個括號的分組不會被引用,運行下例子就能明白。

preg_match() 和 preg_match_all() 的區別

preg_match() 在匹配模式的時候匹配到一次就結束,而 preg_match_all() 則進行全局匹配,通過一個例子就能明白:

$str='hello world china';
$preg="/\w+\s/is";
preg_match($preg,$str,$arr);
print_r($arr);
preg_match_all($preg,$str,$arr);
print_r($arr);

正確理解 $ 和 ^

先說一個正則,為了匹配是否是手機號:

$str = "13521899942a";
$preg="/1[\d]{3,15}/is";
if (preg_match($preg,$str,$arr)) {
  echo "ok";
}

雖然字符串中有一個英文字母,但是這個子模式卻匹配了,原因就在于模式匹配到后就結束了,不會再去尋找英文字母,為了解決這問題 $ 和 ^ 就發揮作用了,比如讓字符串的開始和結尾必須匹配一定的模式,修改如下:

$str = "13521899942a";
$preg="/1[\d]{3,15}$/is";
if (preg_match($preg,$str,$arr)) {
  echo "ok";
}

$ 和 ^ 的跨行模式

默認的情況下,$ 和 ^ 只會匹配完整段落的開始和結尾,但是通過改變選項,允許匹配文本的每一行的開始和結尾,通過下面的例子就能明白

$str='hello
world';
$preg='/\w+$/ism';//$preg='/(?m)\w+$/is';
preg_match_all($preg,$str,$arr);
print_r($arr);

分組命名

在正則中通過括號分組后,可以使用 \1,\2 這樣的數字進行后向引用,但是假如正則中模式太多,在使用的時候就會比較混亂,這時候可以采用分組命名來進行引用,看個例子:

$str ="email:ywdblog@gmail.com;";
preg_match("/email:(?<email>\w+?)/is", $str, $matches);
echo $matches["email"] . "_" . $matches['no'];

懶惰模式

正則在匹配的時候是貪婪的,只要符合模式就會一直匹配下去,下面的例子,匹配到的文本是 <h2>hello</h2><h2>world</h2>


$str = "<h2>hello</h2><h2>world</h2>";
$preg = "/<h2>.*<\/h2>/is";
preg_match($preg,$str,$arr);
print_r($arr);

通過改變一個選項可以修改為懶惰模式,就是一旦匹配到就中止,修改代碼如下:

$str = "<h2>hello</h2><h2>world</h2>";
$preg = "/<h2>.*?<\/h2>/is";
preg_match($preg,$str,$arr);
print_r($arr);

進一步理解 preg_match_all()

通過這函數的最后一個參數,能夠返回不同形式的數組:

$str= 'jiangsu (nanjing) nantong
guangdong (guangzhou) zhuhai
beijing (tongzhou) haidian';
$preg = '/^\s*+([^(]+?)\s\(([^)]+)\)\s+(.*)$/m';
preg_match_all($preg,$str,$arr,PREG_PATTERN_ORDER);
print_r($arr);
preg_match_all($preg,$str,$arr,PREG_SET_ORDER);
print_r($arr);

強大的正則替換回調

雖然 preg_replace() 函數能完成大多數的替換,但是假如你想更好的控制,可以使用回調,不用多說看例子:

$str = "china hello world";
$preg = '/\b(\w+)(\w)\b/';
function fun($m){
    return $m[1].strtoupper($m[2]);
}
echo preg_replace_callback($preg,"fun",$str);

在這一點上,PHP 比 Python 強大的多,Python 中沒有正則回調,不過可以使用閉包的方式解決,可看我以前的文章。

preg_quote()

這個函數類似于 Python 中的 re.compile() 函數,假如在模式中一些元字符僅僅想表達字符的本身含義,可以轉義,但是假如在模式中寫太多的轉義,會顯得很混亂,可以使用這個函數來統一轉義:

$str = '\\*china*world';
$preg = "\*china";
$preg = preg_quote($preg);
echo $preg;
preg_match( "/{$preg}/is",$str,$arr);
print_r($arr);

向前查找 ?= 的妙用

用英文解釋可能比較貼切:

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

這篇文章主要介紹了PHP正在進行時-變量詳解及字符串動態插入變量的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
這篇文章主要介紹了PHP正則匹配操作,結合簡單實例形式分析了php中preg_match_all針對HTML標簽中P元素及img src元素內容的獲取技巧,需要的朋友可以參考下
這篇文章主要介紹了PHP正則匹配中英文、數字及下劃線的方法,可用于針對用戶名的驗證操作,需要的朋友可以參考下
這篇文章主要介紹了PHP正則刪除HTML代碼中寬高樣式的方法,涉及php針對HTML代碼的正則匹配、替換等操作技巧,需要的朋友可以參考下
這篇文章主要介紹了php正則刪除img標簽的方法,結合具體實例形式分析了php針對img標簽正則匹配相關操作技巧,需要的朋友可以參考下
這篇文章主要介紹了PHP正則刪除html代碼中a標簽并保留標簽內容的方法,涉及php基于正則的字符串匹配與子表達式操作相關技巧,需要的朋友可以參考下
主站蜘蛛池模板: 一区二区三区国产好的精 | 毛片电影 | 韩日一区二区 | 欧美在线日韩 | 欧美一二三区 | 国产精品福利视频 | 欧美a视频 | 日韩av在线一区二区 | 欧美成人一区二区三区 | 日韩在线视频一区二区三区 | 精品国产乱码久久久久久丨区2区 | 国产亚洲一区二区精品 | 久草www| 成人国产一区二区三区精品麻豆 | 精品亚洲一区二区三区 | 亚洲国产精品久久人人爱 | 国内久久 | 色一级 | 成人中文字幕av | 久久久久久亚洲精品不卡 | 91成人精品视频 | 国产高清精品在线 | 国产九九av| 亚洲精品欧美 | 欧美激情欧美激情在线五月 | 午夜男人天堂 | 欧美成人h版在线观看 | 性一交一乱一伦视频免费观看 | 色婷婷影院 | 狠狠的操| 日本精品网站 | 91麻豆久久久| 亚洲视频一区在线观看 | 中文字幕精品一区二区三区精品 | 91九色视频 | 午夜欧美一区二区三区在线播放 | 亚洲男人网 | 国产91在线 | 亚洲 | 成人国内精品久久久久一区 | 国产三级在线观看播放 | 欧美黄色一区 |