一个专注于web技能的80后
你不用拼过聪明人,你只须要拼过那些
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);
以上的案例差不多 便是我在事情当中 遇见过的. 断言匹配 暂时就说到这里,往后会连续更新!!
极客小俊@今日头条,首发原创文章
如果喜好话请 "点赞 评论 收藏" 一键三连
大家的支持便是我坚持下去的动力!