正则表达式之零宽断言实例详解【基于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函数提高开发效率  想要更高端的建设网站,这些原则一定要坚持!