作者:极客小军,专注网络技术的80后,不用和聪明人斗,只和那些懒惰的人斗,你一定会超越大多数人!?GeekerJun?PHPregex中的断言匹配我遇到过很多初学者不知道什么是==断言匹配==,今天给小白讲解一个概述断言匹配也叫==定位边界匹配==,意思是语法:?<=n:表示匹配当前n个字符串之前或之后的字符串==Tips==:这里主要是搞清楚是否会包含n个字符串,如果还不明白,那就来吧看下面的case==例子1==:匹配n个字符串之后的所有字符:这个是匹配之后调用的注意:【这里不会包含当前n个字符】Case代码如下://AssertionMatchCase1Matches第n个字符串之后的所有字符串,但第n个字符不包括在这里,$string,$arr);show($arr);==例子2==:匹配第n个字符串之前的所有字符,这里称之为:Matchbefore注意:[这里会继续ainthecurrentncharacters]case代码如下://断言匹配case2匹配第n个字符串之前的所有字符串,但是这里会包含这个字符n$string='33333333aaaaaabbbbbbaidu.com.cn北京市朝阳区';$pattern='/.*(?<=baidu)/';preg_match($pattern,$string,$arr);显示($arr);我想大家看完案例后应该知道Go前后的匹配是什么了吧!!不懂就贴代码,运行,运行,打印出结果,你就知道意思了!你会在w3schoolapi文档的JS类RegExp章节的量词中找到一个叫:?=n的东西,这也是断言匹配的一种形式,?=n==表示匹配包含之后或之前的字符串thecurrentnstring====Example3==:匹配后注意:【这里会包含当前n个字符,这里和Example1刚好相反】其实仔细观察的同学会发现最核心的区别是小于号:<会造成不同的效果//Assertionmatchingcase3匹配第n个字符串之后的所有字符串,其中会包含第n个字符$string='33333333aaaaaabbbbbbaidu.com.cn北京市朝阳区';$pattern='/(?=baidu)。*/';preg_match($pattern,$string,$arr);show($arr);==例子4==:匹配前注:[这里不会包含当前n个字符,这与例2】废话不多说看代码!//断言匹配case4匹配第n个字符串之前的所有字符串,此处不包含第n个字符$string='33333333aaaaaabbbbbbaidu.com.cnBeijingCityChaoyangDistrict';$pattern='/.*(?=baidu)/is';preg_match($pattern,$string,$arr);show($arr);现在我明白了,我一开始说的:如果你想知道为什么会包含n个字符串!!既然我们已经弄明白了什么是断言匹配,那么让我们继续看几个综合性的例子。==断言匹配综合小应用示例1==:提取字符串中的字符之一!代码如下:$string='33333333666www.baidu.com.cn北京市朝阳区';$pattern='/(?<=666).*(?=\.cn)/is';preg_match($pattern,$string,$arr);show($arr);==断言匹配综合小应用示例2==:提取@中间的字符代码如下:$string='@php@python.com@perl.com@';$pattern='/(?<=@).*?(?=@)/is';preg_match_all($pattern,$string,$arr);show($arr);==断言匹配综合小应用示例3==:提取@中间的字符,升级代码如下:$string='@php@python.com@perl.com@asdasdas#java#springboot#';$pattern='/(?<=[@#]).*?(?=[@#])/is';preg_match_all($pattern,$string,$arr);显示($arr);多于案例几乎是我在工作中遇到的。断言匹配暂时就到这里,以后会继续更新!!如果我的博客对您有帮助,如果您喜欢我的博客内容,请“点赞”“评论”“收藏”?一键三重链接!您的支持是我前进的动力。
