php 零宽断言,正则表达式之零宽断言实例详解

这篇文章主要介绍了正则表达式之零宽断言,简单介绍了零宽断言的概念、分类及php实现技巧与相关注意事项,需要的朋友可以参考下

本文实例讲述了正则表达式之零宽断言。分享给大家供大家参考,具体如下:

前言

之前我曾写了一篇关于正则表达式的文章(http://www.jb51.net/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='/(?

$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

总结

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506046.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

element ui 多个子组件_vue前端UI框架,一点都不圆润,盘它!

面对众多vue前端UI框架&#xff0c;看着它们干干巴巴、麻麻赖赖的样子&#xff0c;一点都不圆润&#xff0c;跟我一起盘它&#xff01;Vue移动端UI框架1、Vux&#xff08;star:15620)VUX&#xff08;读音 [v’ju:z]&#xff0c;同 views&#xff09;是基于WeUI和Vue(2.x)开发的…

ios 裁剪圆形头像_iOS开发之裁剪圆形头像

- (void)viewDidLoad {[super viewDidLoad];//加载图片UIImage *image [UIImage imageNamed:"菲哥"];//获取图片尺寸CGSize size image.size;//开启位图上下文UIGraphicsBeginImageContextWithOptions(size, NO, 0);//创建圆形路径UIBezierPath *path [UIBezierPa…

python 图像处理_Python中的十大图像处理工具

文章发布于公号【数智物语】 &#xff08;ID&#xff1a;decision_engine&#xff09;&#xff0c;关注公号不错过每一篇干货。来源 | 大数据文摘(BigDataDigest)编译 | 张秋玥、小七、蒋宝尚本文主要介绍了一些简单易懂最常用的 Python 图像处理库。当今世界充满了各种数据&am…

php函数方法,基于PHP函数的操作方法

如下所示&#xff1a;//简单函数function show(){echo "hello";}show();//有参数的函数function show($a){echo "$a";}show("world");//有返回值的函数function show(){return "小V&#xff0c;你好&#xff01;";}echo show();functi…

centos7安装php5.2yum源操作_Centos7.6使用yum安装PHP7.2

Centos7.6使用yum安装PHP7.21、安装源安装php72w&#xff0c;是需要配置额外的yum源地址的&#xff0c;否则会报错不能找到相关软件包。php高版本的yum源地址&#xff0c;有两部分&#xff0c;其中一部分是epel-release&#xff0c;另外一部分来自webtatic。如果跳过epel-relea…

mysqlclient==1.3.7对应mysql版本_「MySQL」CentOs 7 下安装MySQL

MySQLMySQL 是最流行的关系型数据库管理系统&#xff0c;在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System&#xff1a;关系数据库管理系统)应用软件之一YUM 安装mysql1、下载 YUM 仓库文件打开网址&#xff1a; https://dev.mysql.com/downloads/…

php rewinddir(),PHP rewinddir() 函数 ——jQuery中文网

实例打开一个目录&#xff0c;列出其中的文件&#xff0c;充值目录句柄&#xff0c;重新列出其中的文件&#xff0c;然后关闭&#xff1a;$dir "/images/";// Open a directory, and read its contentsif(is_dir($dir)){if ($dh opendir($dir)){//List files in im…

汇编jnl_汇编指令集

1 X86和X87汇编指令大全(有注释)2 ---------- 一、数据传输指令 ----------------------------------------------------3 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.4 1. 通用数据传送指令.5 MOV 传送字或字节.6 MOVSX 先符号扩展,再传送.7 MOVZX 先零扩展,再传…

nginx log response_nginx优化配置大全

很多程序员面试被问到nginx优化做过哪些&#xff0c;因此来记录下配置文件样例为生产环境样例。1、nginx基本优化安装方式有2种&#xff1a;1、源码包安装 2、yum&#xff08;apt-get&#xff09;安装区别为如果用yum安装的话&#xff0c;很方便&#xff0c;并且基本不报错。如…

指纹对比软件_iQOO VS 小米9屏幕指纹大对决,这次我为vivo疯狂打Call!

在经历了性能、续航、充电的对比之后&#xff0c;我们今天带来了iQOO和小米9的屏幕指纹对比&#xff0c;看看两者在屏幕指纹方面究竟有何不同的表现。▼屏幕指纹原理目前屏幕指纹技术大致分为光电屏幕指纹和超声波屏幕指纹两种&#xff0c;而iQOO和小米9所采用的都是光电屏幕指…

oracle数据库恢复参数文件位置,Oracle数据库的参数文件备份与恢复

Oracle数据库的参数文件包含两个文件:一个是spfile二进制文件名字为spfilesid.ora(其中sid你数据库的实例名称)。另一个是pfile文本文件的参数文件&#xff0c;名字为initsid.ora(其中sid你数据库的实例名称)。默认情况下数据库是只有一个参数文件的&#xff0c;那就是spfile,它…

python绘制3d坐标轴_matplotlib在python上绘制3D散点图实例详解

大家可以先参考官方演示文档&#xff1a; 效果图&#xff1a;3D scatterplotDemonstration of a basic scatterplot in 3D.from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np def randrange(n, vmin, vmax):Helper function to mak…

oracle cascade是什么意思啊,Oracle外键(Foreign Key)之级联删除(DELETE CASCADE)

什么是级联删除(DELETE CASCADE)&#xff1f;级联删除是指当主表(parent table)中的一条记录被删除&#xff0c;子表中关联的记录也相应的自动删除。备注&#xff1a;外键字段在该表中为主键的表&#xff0c;即为主表&#xff1b;外键字段在该表中为普通字段的表&#xff0c;即…

翻转链表python递归_Python实现链表反转的方法【迭代法与递归法】

导读 这篇文章主要介绍了Python实现链表反转的方法,结合实例形式分析了Python迭代法与递归法实现链表反转的相关操作技巧与注意事项,需要的朋友可以参考下 本文实例讲述了Python实现链表反转的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a; Python实现链表反转 …

oracle高级函数去重,傅老师课堂:Oracle高级应用之去重聚合函数

开篇一笑&#xff1a;高中的时候&#xff0c;自行车被偷&#xff0c;早上顺路搭同学的自行车。我坐在后座看到前面一大妈跑步&#xff0c;很猥琐的对同学说&#xff1a;“你看前面那个肥婆跑得屁股都甩圆了&#xff01;”这货沉默了一下。当我们和大妈擦身而过的时候&#xff0…

jquery手写轮播图_jquery 实现轮播图详解及实例代码_jquery_脚本之家

轮播图&#xff1a;接触jquery也有一段时间了&#xff0c;今天刚好利用轮播图来练练手。博文的前面会介绍一个简单用jquery做轮播图的例子&#xff0c;中间会插入一些关于轮播图更多的思考&#xff0c;在后面会用Javascript的方法来写一个轮播图&#xff0c;最后则是关于jquery…

关于python_关于python的基础知识

一&#xff0c;编程语言的类型&#xff1a; 1、编译型 2、解释型 3、静态语言 4、动态语言 5、强类型定义语言 6、弱类型定义语言 编译型vs解释型 编译型&#xff1a; 优点&#xff1a;编译器一般会有预编译的过程对代码进行优化。因为编译只做一次&#xff0c;运行时不需要编译…

oracle10g如何导出dmp,Oracle 10g dmp文件的导入导出

Oracle数据导入dmp文件可以是“某个用户下的数据库”&#xff0c;也可以是“某张表”&#xff0c;这里以导入数据库为例说明 &#xff1a;1.用SYS用户名&#xff0c;以DBA的身份在ie中登入到数据库(ORACLE客户端Enterprise Manager Console)2.在方案->用户与权限->用户新…

idea 不打开文件提示错误_IDEA无法正常启动(打不开报错)

版权声明&#xff1a;转载请附上文章地址https://blog.csdn.net/qq_42672839IDEA无法正常启动(两种问题)目录第一种是缓存问题 双击Idea打开&#xff0c;无任何反应&#xff0c;资源管理器中有Idea的进程。第二种报错(报错&#xff1a; cannot lock system foiders)两种…

python套用word模板_如何使用Python批量创建Word模板

如何使用 Python 批量创建 Word 模板 在日常工作中我们经常需要重复性地将同一份内容的 Word 文档资料发送 给多个不同客户&#xff0c; 此时 Word 文档内容可能只有客户署名不同、 或者只有部分关 键信息不同。此时如果采用传统的工作方法我们可能需要反复地打开不同 Word 文档…