PHP正則表達(dá)式核心技術(shù)完全詳解 第12節(jié) [附加知識] 斷言匹配

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


PHP正則中的斷言匹配
我遇見過很多初學(xué)者都不知道什么叫 斷言匹配 ,今天就跟小白解釋一下?
概述 斷言匹配也叫定位邊界匹配、 含義就是要取從某一個字符串的位置開始 或 結(jié)尾開始截取 語法: ?<=n : 表示匹配當(dāng)前從n字符串之后 或者 之前的字符串?
小提示: 這里主要是要搞清楚會不會包含n字符串, 如果還不理解那么我們就看下面的案例吧
例1: 匹配n字符串之后的所有字符: 這里就叫 匹配之后 ?注意:[這里不會包含當(dāng)前n的字符] ?案例代碼如下:
?//斷言匹配 案例1 ?匹配n字符串之后的所有字符串, 但這里不會包含n這個字符
?$string='33333333aaaaaabbbbbbaidu.com.cn 北京市朝陽區(qū)';
?$pattern='/(?<=baidu).*/';
?preg_match($pattern,$string,$arr);
?show($arr);
例2: 匹配n字符串之前的所有字符, 這里就叫: 之前匹配 ?注意:[這里會包含當(dāng)前n字符]案例代碼如下:
?//斷言匹配 案例2 ?匹配n字符串之前的所有字符串, 但這里會包含n這個字符
?$string='33333333aaaaaabbbbbbaidu.com.cn 北京市朝陽區(qū)';
?$pattern='/.*(?<=baidu)/';
?preg_match($pattern,$string,$arr);
?show($arr);
?我想大家看了案例以后應(yīng)該清楚什么叫之前 之后 的匹配了吧!! ?如果不清楚就把代碼粘貼,運(yùn)行起來,跑一下,打印出結(jié)果就會知道含義了!
在w3school api文檔的JS分類里RegExp篇章中量詞里面 大家會找到一個叫: ?=n 的東西 , 這個也是斷言匹配的一種形式, ??=n 表示匹配包含當(dāng)前從n字符串之后 或者 之前的字符串
例3: 之后的匹配 ?注意:[這里會包含當(dāng)前n的字符, 這里跟例1恰好相反 ] ?其實 仔細(xì)觀察的同學(xué)一定會發(fā)現(xiàn) 核心區(qū)別就是少一個小于符號 : < ?就會造成不同的效果
? //斷言匹配 案例3 ?匹配n字符串之后的所有字符串, 這里會包含n這個字符
?$string='33333333aaaaaabbbbbbaidu.com.cn 北京市朝陽區(qū)';
?$pattern='/(?=baidu).*/';
?preg_match($pattern,$string,$arr);
?show($arr);
例4: 之前的匹配 ?注意:[這里不會包含當(dāng)前n的字符 , 這里也恰好跟例2 相反 ] 就不多說了直接看代碼吧!
?//斷言匹配 案例4 ?匹配n字符串之前的所有字符串, 這里不包含n這個字符
?$string='33333333aaaaaabbbbbbaidu.com.cn 北京市朝陽區(qū)';
?$pattern='/.*(?=baidu)/is';
?preg_match($pattern,$string,$arr);
?show($arr);
現(xiàn)在明白我一開始就說: 要是要搞清楚會不會包含n字符串 的原因了吧!!
那么現(xiàn)在搞清楚了什么是斷言匹配之后, 我們繼續(xù)來看幾個綜合小例子吧 斷言匹配綜合小應(yīng)用 例1 : 抽取字符串的其中某一段字符! 代碼如下:
?$string='33333333666www.baidu.com.cn 北京市朝陽區(qū)';
?$pattern='/(?<=666).*(?=\.cn)/is';
?preg_match($pattern,$string,$arr);
?show($arr);
斷言匹配綜合小應(yīng)用 例2: 抽取@中間的字符 代碼如下:
?$string='@php@python.com@perl.com@';
?$pattern='/(?<=@).*?(?=@)/is';
?preg_match_all($pattern,$string,$arr);
?show($arr);
斷言匹配綜合小應(yīng)用 例3: 抽取@中間的字符 升級版 代碼如下:
?$string='@php@python.com@perl.com@asdasdas#java#spring boot#';
?$pattern='/(?<=[@#]).*?(?=[@#])/is';
?preg_match_all($pattern,$string,$arr);
?show($arr);
以上的案例差不多 就是我在工作當(dāng)中 遇見過的.
斷言匹配 暫時就說到這里,以后會繼續(xù)更新!!
如果喜歡話請 點(diǎn)贊 ?評論 ?收藏 一鍵三連 ?
大家的支持就是我堅持下去的動力!