在这里插入图片描述作者:极客小俊 一个专注于web技术的80后
我不用拼过聪明人,我只需要拼过那些懒人 我就一定会超越大部分人!
极客小俊@简书,官方首发原创文章
博客地址:
👉 GeekerJun 👈
PHP正则中的断言匹配
我遇见过很多初学者都不知道什么叫 ==断言匹配== ,今天就跟小白解释一下
概述
断言匹配也叫==定位边界匹配==、
含义就是要取从某一个字符串的位置开始 或 结尾开始截取
语法: ?<=n : 表示匹配当前从n字符串之后 或者 之前的字符串
==小提示==: 这里主要是要搞清楚会不会包含n字符串, 如果还不理解那么我们就看下面的案例吧
==例1==: 匹配n字符串之后的所有字符: 这里就叫 匹配之后
注意:[这里不会包含当前n的字符]
案例代码如下:
//断言匹配 案例1 匹配n字符串之后的所有字符串, 但这里不会包含n这个字符
$string='33333333aaaaaabbbbbbaidu.com.cn 北京市朝阳区';
$pattern='/(?<=baidu).*/';
preg_match($pattern,$string,$arr);
show($arr);
==例2==: 匹配n字符串之前的所有字符, 这里就叫: 之前匹配
注意:[这里会包含当前n字符]
案例代码如下:
//断言匹配 案例2 匹配n字符串之前的所有字符串, 但这里会包含n这个字符
$string='33333333aaaaaabbbbbbaidu.com.cn 北京市朝阳区';
$pattern='/.*(?<=baidu)/';
preg_match($pattern,$string,$arr);
show($arr);
我想大家看了案例以后应该清楚什么叫之前 之后 的匹配了吧!!
如果不清楚就把代码粘贴,运行起来,跑一下,打印出结果就会知道含义了!
在w3school api文档的JS分类里RegExp篇章中量词里面 大家会找到一个叫: ?=n 的东西 , 这个也是断言匹配的一种形式,
?=n ==表示匹配包含当前从n字符串之后 或者 之前的字符串==
==例3==: 之后的匹配 注意:[这里会包含当前n的字符, 这里跟例1恰好相反 ]
其实 仔细观察的同学一定会发现 核心区别就是少一个小于符号 : < 就会造成不同的效果
//断言匹配 案例3 匹配n字符串之后的所有字符串, 这里会包含n这个字符
$string='33333333aaaaaabbbbbbaidu.com.cn 北京市朝阳区';
$pattern='/(?=baidu).*/';
preg_match($pattern,$string,$arr);
show($arr);
==例4==: 之前的匹配 注意:[这里不会包含当前n的字符 , 这里也恰好跟例2 相反 ] 就不多说了直接看代码吧!
//断言匹配 案例4 匹配n字符串之前的所有字符串, 这里不包含n这个字符
$string='33333333aaaaaabbbbbbaidu.com.cn 北京市朝阳区';
$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#spring boot#';
$pattern='/(?<=[@#]).*?(?=[@#])/is';
preg_match_all($pattern,$string,$arr);
show($arr);
以上的案例差不多 就是我在工作当中 遇见过的.
断言匹配 暂时就说到这里,以后会继续更新!!
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏”
一键三连哦!
如果以上内容有任何错误或者不准确的地方,欢迎在下面 👇 留个言指出、或者你有更好的想法,欢迎一起交流学习
网友评论