php 零宽断言,正则表达式之零宽断言实例详解【基于PHP】

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

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

前言

之前我曾写了一篇关于正则表达式的文章(//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

总结

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

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

PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:

JavaScript正则表达式在线测试工具:http://tools.jb51.net/regex/javascript

正则表达式在线生成工具:http://tools.jb51.net/regex/create_reg

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php正则表达式用法总结》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

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

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

相关文章

python 逻辑回归准确率是1,Python利用逻辑回归模型解决MNIST手写数字识别问题详解...

本文实例讲述了Python利用逻辑回归模型解决MNIST手写数字识别问题。分享给大家供大家参考&#xff0c;具体如下&#xff1a;1、MNIST手写识别问题MNIST手写数字识别问题&#xff1a;输入黑白的手写阿拉伯数字&#xff0c;通过机器学习判断输入的是几。可以通过TensorFLow下载MN…

php面试题接口方面,php面试题6 - osc_xb4v1nhl的个人空间 - OSCHINA - 中文开源技术交流社区...

php面试题6一、总结二、php面试题6写出你认为语言中的高级函数:1)preg_replace()2)preg_match()3) ignore_user_abort()4) debug_backtrace()5) date_default_timezone_set(“PRC”)6) get_class_methods() 得到类的方法名的数组7) preg_split() 字符串分割成数组8)json_encode…

轨道车辆垂向振动Matlab建模与仿真,基于matlab/simulink的车辆建模与故障分析

随着铁路行业高速发展,列车运行速度逐渐提高,铁路安全越来越受到人们的重视,如何保证铁道车辆运行安全及其故障监测成为一个亟待解决的重大课题。客车车辆在结构上的故障主要有一系弹簧断裂、减振器失效、空气弹簧漏气、高圆弹簧断裂、车轮踏面擦伤、轴承故障以及蛇形减震器故障…

关于php的问题有哪些,关于PHP的报错问题?

关于这个报错的表格我不知到怎么去做&#xff0c;下面的是代码&#xff1a;header(content-type:text/html;charsetutf-8);session_start();include_once ../include/conf.php;include_once ../include/func.php;include_once ../include/mysql.func.php;check_login();$pageSi…

oracle消耗内存的查询,在AIX中计算ORACLE消耗的私有内存总数

一早就收到兄弟伙发的QQ信息&#xff0c;关于aix中oracle内存计算的内容The RSS number is equal to the sum of the number of working-segment pages in memory times 4 andthe code-segment pages in memory times 4.The TRS number is equal to just the code-segment page…

php读取ds18b20,DS18B20_单总线协议

.H文件#ifndef _ONEWIRE_H#define _ONEWIRE_H#include "STC15F2K60S2.H"#include #define OW_SKIP_ROM 0xcc#define DS18B20_CONVERT 0x44#define DS18B20_READ 0xbe//IC引脚定义sbit DQ P1^4;//函数声明extern void Delay_OneWire(unsigned int t);extern void Wri…

oracle官方文档查看方法,oracle官方文档_查看初始化参数(举例)

深蓝的blog&#xff1a;http://blog.csdn.net/huangyanlong/article/details/46864217记录了一下&#xff0c;使用oracle11g联机文档&#xff0c;查看初始化参数的步骤。如果想查看&#xff0c;可以修改的初始化参数的概念信息&#xff0c;可以点击“ChangingParameter Values …

matlab usewhitebg,Matlab的:geo​​show的網格和框架

對於問題1和問題2&#xff0c;原因是軸總是在圖的後面。因此&#xff0c;一種解決方案是在當前的軸上添加新軸並顯示網格&#xff0c;框和自定義刻度。對於問題3&#xff0c;我使用regexprep以取代S後綴負緯度(同上爲經度)。我唯一的問題是經度0將是0E&#xff0c;緯度0,0N。這…

oracle p l,使用P.A.L制作便携软件 (一) 基本原理 | 么么哒拥有者

因爱好自学所得&#xff0c;并非专业&#xff0c;此处只是抛砖引玉&#xff0c;欢迎相互交流、学习、提高&#xff0c;辛苦码字不易&#xff0c;如转载望保留链接出处。简单介绍&#xff1a;P.A.L是PortableApps.com Launcher的简称&#xff0c;它是PortableApps.com开发的便携…

oracle form执行后左上角没出现oracle标记,oracle form学习笔记

新增form步骤打开模板TEMPLATE&#xff0c;将其改成自己所要的名称&#xff0c;删除Data Blacks中的BLOCKNAME,DETAILBLOCK,删除Canvases中的BLOCKNAME,删除Windows中的BLOCKNAME,新增自己的Windows&#xff0c;Canvases&#xff0c;DateBlacks&#xff0c;在form级别的PRE-FOR…

linux 建oracle分区表,Oracle 10g 11g分区表创建举例

1.3. 创建其他类型分区表1.3.1. 用多列分区键创建范围分区表SQL> create table aning_mutilcol_range2 (aning_id number,3 aning_name varchar2(100),4 aning_year number,5 aning_month number,6 aning_day number,7 aning_amount number8 )9 partition by range (aning_y…

php carbon 连续日期,日期及时间处理包 Carbon 在 Laravel 中的简单使用

在编写 PHP 应用时经常需要处理日期和时间&#xff0c;这篇文章带你了解一下 Carbon – 继承自 PHP DateTime 类的 API 扩展&#xff0c;它使得处理日期和时间更加简单。Laravel 中默认使用的时间处理类就是 Carbon。namespace Carbon;class Carbon extends \DateTime{// code …

chmod g s oracle,chmod

chmod(1)名称chmod - 更改文件的权限模式用法概要chmod [-fR] absolute-mode file...chmod [-fR] symbolic-mode-list file...chmod [-fR] acl_operation file...chmod [-fR] [- named_attribute]...attribute_specification_list file...描述chmod 实用程序可更改或分配文件的…

linux lzo 压缩文件,Linux常用压缩和解压命令

.tar 解包 tar xvf filename.tar.tar 打包 tar cvf filename.tar dirname.gz 解压1 gunzip filename.gz.gz 解压2 gzip -d filename.gz.gz 压缩 gzip filename.tar.gz 和 .tgz 解压 tar zxvf filename.tar.gz.tar.gz 和 .tgz 压缩 tar zcvf filename.tar.gz dirname.bz2 解压1 …

linux进程cpu时间片,能讲一下在Linux系统中时间片是怎么分配的还有优先级的具体算法是...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼图 1 RT-Linux结构RT -Linux的关键技术是通过软件来模拟硬件的中断控制器。当Linux系统要封锁CPU的中断时时&#xff0c;RT-Linux中的实时子系统会截取到这个请求&#xff0c;把它记录下来&#xff0c;而实际上并不真正封锁硬件中断…

linux中进行远程服务器连机可以采用telnet,端口号为,使用telnet测试指定端口的连通性...

原标题&#xff1a;使用telnet测试指定端口的连通性telnet 是一个阉割版的 ssh &#xff0c;它数据不加密&#xff0c;数据容易被盗窃&#xff0c;也容易受中间人攻击&#xff0c;所以默认情况下 telnet 端口是必须要被关闭的。telnet为用户提供了在本地计算机上完成远程主机工…

linux xd命令,看Linux文件的内容:用cat,less,more,head,tail,nl,od,xxd,gv,xdvi命令

使用命令在Linux系统中查看文件的内容是Linux管理员的基本技能之一&#xff0c;在Linux中&#xff0c;有许多应用程序以不同的方式显示文件内容。您可以使用cat、less、more、head、tail、nl、od、xxd、gv、xdvi命令来查看文本文件或任何其他文件。为了对此进行测试&#xff0c…

linux远程拷贝免手动输入密码,scp远程拷贝避免输入密码

使用scp远程拷贝文件到指定服务器上&#xff0c;在客户端生成密钥放在需要验证的服务器上&#xff0c;这样再次连接后直接登陆&#xff0c;避免输入密码。设定场景我们需要将tomcat服务器(client1)192.168.30.20 上的catalina.out日志文件&#xff0c;每天使用指定用户拷贝到日…

玩转linux文件描述符和重定向,玩转Linux文件描述符和重定向

本文介绍linux中文件描述符与重定向的相关知识&#xff0c;文件描述符是与文件输入、输出相关联的整数&#xff0c;它们用来跟踪已打开的文件。有需要的朋友参考下。原文出处&#xff1a;linux下的文件描述符是与文件输入、输出相关联的整数。它们用来跟踪已打开的文件。最常见…

linux哪个指令可以设定使用者的密码,linux期末考试练习题 2

一、单项选择题1、下面不是对Linux操作系统特点描述的是()A、良好的可移植性B、单用户C、多用户D、设备独立性2、查看创建目录命令mkdir的帮助文档可以使用()A、mkdir -hB、man mkdirC、help mkdirD、info mkdir3、用标准的输出重定向(>)像”>file01”能使文件file01的数…