千家信息网

php正则表达式如何实现零宽断言

发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,这篇文章将为大家详细讲解有关php正则表达式如何实现零宽断言,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。概念零宽断言,大多地方这样定义它,用于查找在某些内容(但并
千家信息网最后更新 2025年02月05日php正则表达式如何实现零宽断言

这篇文章将为大家详细讲解有关php正则表达式如何实现零宽断言,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

概念

零宽断言,大多地方这样定义它,用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像 \b ^ $ \< > 这样的锚定作用,用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。我的理解是在一个限定位置的字符串之前或之后进行匹配查找。所以零宽断言,执行过程分两种情况,如果是正向断言,应该是这样的,第一步,判断判断断言是否为真(即是否满足一定条件)第二步,如果满足条件,则进行下一步查找匹配。如果是反向断言,第一步还是按照正则表达式顺序去匹配。第二步,遇到反向代言,判断是否满足反之代言。

正先行断言

什么是正先行断言,就是在字符串相应位置之前进行查找匹配,使用 (?=exp) 匹配exp前面的位置。

实例

$str="abcgwcab";$parent='/bc(?=gw)/';$str=preg_match($parent,$str,$match);var_dump($match);/**输出结果:int 1array (size=1)   0 => string 'bc' (length=2)  */

解析:首先查找字符串"abcgwcab"中gw位置,断言为真,然后在匹配bc。如果将正则表达式写成$parent='/bc(?=gw)ca/'; 将会匹配不成功。

反先行断言

什么是反先行断言,使用 (?!exp) 匹配后面跟的不是exp。

实例:

$str="abcgwcab";$parent='/bc(?!ww)gw/';$str=preg_match($parent,$str,$match);var_dump($str);var_dump($match);/**输出:int 1array (size=1) 0 => string 'bcgw' (length=4)*/

解析:首先判断字符串是否包含bc,然后判断其后面不是ww,最后匹配gw。可以看出反向断言之前后之后,能够在添加其他匹配条件。

正后发断言

什么是正后发断言,就是在字符串相应位置之后进行查找匹配, (?<=exp) 匹配exp后面的位置

实例:

$str="abcgwcab";$parent='/(?<=gw)ca/';$str=preg_match($parent,$str,$match);var_dump($str);var_dump($match);/**输出结果:int 1array (size=1) 0 => string 'ca' (length=2)*/

解析:第一步,查找字符"abcgwcab"中是否包含有gw,返回结果为true,然后进行第二步,查找gw后面是否有ca。

反后发断言

什么是反后发断言,使用(?

$str="abcgwcab";$parent='/(?

解析:首先在字符串中匹配gw,然后判断其前面是不是bc,发现其前面是bc,故返回false。

练习题

例1:\d+(?=abc)
判断一个字符串中是否包含'abc',且其前面是否包含一个或多个数字

例2:(?<=\d\d)\w
判断字符串中是否存在连续两个数字,且其后面包含一个字母

例3:\d{3} (?!55)
判断字符串中是否包含连续三个数字,且三个数字后面不是55

例4:(?
判断一个字符串是否包含一个字母加数字的组合,且其前面不是ac

总结

先行断言与后发断言区别?

先行断言是判断断言之前的正则表达式,断言在其他正则表达式之后。后发断言是判断断言之前的正则表达式,断言在其他正则表达式之前。这里的先与后,是其他匹配相对应断言在正则表达式中的顺序。

关于"php正则表达式如何实现零宽断言"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

字符 字符串 正则 表达式 位置 数字 条件 内容 实例 篇文章 三个 字母 就是 更多 结果 顺序 输出 不错 实用 成功 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 智慧农贸批发市场软件开发 北京网络软件开发服务保障 杭州直销软件开发哪家有名 非洲服务器有哪些服务商 学校服务器的搞笑图片 豪情网络技术有限公司 新加坡 四川知名软件开发报价 软件开发男喜欢什么意思 上海软件开发交流 中专软件开发前景 安卓app数据库用什么好 中国工商银行杭州软件开发 热血江湖私服还原数据库 我的世界电脑版GTA服务器 数据库数据清理工具中文完整版 软件开发时间代码 空间数据库的组织方式有哪些 连接至蒸汽平台服务器发生错误 龙海应用软件开发 金蝶服务器硬盘坏了无备份 苏州h3c机架式服务器报价 网络安全靠大家宣传 绿城历史外援数据库 软件开发需要高学历吗 用友t3软件数据库 马宁市网络安全管理制度 郑州高新区网络安全会议 甘肃网络安全局兰州总局 软件开发成本的基准生产率 医院网络安全宣传方案
0