正则表达式之零宽断言实例详解【基于PHP】
发布时间 - 2026-01-11 00:41:32 点击率:次本文实例讲述了正则表达式之零宽断言。分享给大家供大家参考,具体如下:

前言
之前我曾写了一篇关于正则表达式的文章(https://www./article/111359.htm) 在该文章中详细介绍了正则,但是关于零宽断言介绍却是很少提及到。现在将该内容补充一下。在本文中,主要解决如下问题:
① 什么是零宽断言,为什么要使用零宽断言
② 怎样使用零宽断言
概念
零宽断言,大多地方这样定义它,用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像 \b ^ $ \< > 这样的锚定作用,用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。我的理解是在一个限定位置的字符串之前或之后进行匹配查找。所以零宽断言,执行过程分两种情况,如果是正向断言,应该是这样的,第一步,判断判断断言是否为真(即是否满足一定条件)第二步,如果满足条件,则进行下一步查找匹配。如果是反向断言,第一步还是按照正则表达式顺序去匹配。第二步,遇到反向代言,判断是否满足反之代言。
正先行断言
什么是正先行断言,就是在字符串相应位置之前进行查找匹配,使用 (?=exp) 匹配exp前面的位置。
实例
$str="abcgwcab"; $parent='/bc(?=gw)/'; $str=preg_match($parent,$str,$match); var_dump($match); /** 输出结果: int 1 array (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 1 array (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 1 array (size=1) 0 => string 'ca' (length=2) */
解析:第一步,查找字符”abcgwcab”中是否包含有gw,返回结果为true,然后进行第二步,查找gw后面是否有ca。
反后发断言
什么是反后发断言,使用(?
$str="abcgwcab"; $parent='/(?<!bc)gw/'; $str=preg_match($parent,$str,$match); var_dump($str); var_dump($match); /** int 0 array (size=0) empty */
解析:首先在字符串中匹配gw,然后判断其前面是不是bc,发现其前面是bc,故返回false。
练习题
例1:\d+(?=abc)
判断一个字符串中是否包含'abc',且其前面是否包含一个或多个数字
例2:(?<=\d\d)\w
判断字符串中是否存在连续两个数字,且其后面包含一个字母
例3:\d{3} (?!55)
判断字符串中是否包含连续三个数字,且三个数字后面不是55
例4:(?<!ac)\w\d
判断一个字符串是否包含一个字母加数字的组合,且其前面不是ac
总结
先行断言与后发断言区别?
先行断言是判断断言之前的正则表达式,断言在其他正则表达式之后。后发断言是判断断言之前的正则表达式,断言在其他正则表达式之前。这里的先与后,是其他匹配相对应断言在正则表达式中的顺序。
PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:
JavaScript正则表达式在线测试工具:
http://tools./regex/javascript
正则表达式在线生成工具:
http://tools./regex/create_reg
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php正则表达式用法总结》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
# 正则表达式
# 零宽断言
# 正则
# 详解各种PHP函数漏洞
# php bcdiv和bcmul 函数的怪异现象
# PHP危险函数禁用深入详解
# php中使用array_filter()函数过滤数组实例讲解
# php array_map()函数实例用法
# PHP执行系统命令函数实例讲解
# PHP超级全局变量、魔术变量和魔术函数汇总整理
# python如何调用php文件中的函数详解
# PHP中断言函数的使用详解
# 第二步
# 程序设计
# 操作技巧
# 是在
# 就是在
# 相关内容
# 却是
# 多个
# 将会
# 是这样
# 两种
# 感兴趣
# 给大家
# 写了
# 详细介绍
# 被称为
# 可以看出
# 我曾
# 更多关于
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
如何基于云服务器快速搭建个人网站?
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
html如何与html链接_实现多个HTML页面互相链接【互相】
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
网站制作大概多少钱一个,做一个平台网站大概多少钱?
如何在建站宝盒中设置产品搜索功能?
实例解析Array和String方法
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
个人网站制作流程图片大全,个人网站如何注销?
Python并发异常传播_错误处理解析【教程】
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
Laravel如何使用Gate和Policy进行授权?(权限控制)
北京网站制作的公司有哪些,北京白云观官方网站?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
香港服务器租用费用高吗?如何避免常见误区?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
bootstrap日历插件datetimepicker使用方法
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
js实现点击每个li节点,都弹出其文本值及修改
微信h5制作网站有哪些,免费微信H5页面制作工具?
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
BootStrap整体框架之基础布局组件
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
phpredis提高消息队列的实时性方法(推荐)
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
如何挑选高效建站主机与优质域名?
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
网站建设要注意的标准 促进网站用户好感度!
如何用AWS免费套餐快速搭建高效网站?
Laravel如何配置Horizon来管理队列?(安装和使用)
在线教育网站制作平台,山西立德教育官网?
如何将凡科建站内容保存为本地文件?
如何快速上传建站程序避免常见错误?
如何在IIS服务器上快速部署高效网站?
Laravel PHP版本要求一览_Laravel各版本环境要求对照
linux写shell需要注意的问题(必看)
JavaScript如何实现音频处理_Web Audio API如何工作?
郑州企业网站制作公司,郑州招聘网站有哪些?
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
想要更高端的建设网站,这些原则一定要坚持!

