php 正则匹配特殊 x20,php的特殊正则

本文详细介绍了PHP中的特殊正则表达式,包括非获取匹配、否定字符类、贪婪与非贪婪模式等,并给出了示例。同时,讲解了正则表达式的定界符、模式修正符以及如何处理嵌套匹配。此外,还讨论了命名捕获组和正则表达式注释的使用。示例代码展示了如何在实际操作中应用这些技巧。
摘要由CSDN通过智能技术生成

php的特殊正则

来源:网络    更新时间:2019-12-13 23:42:08    编辑:用户1gt2d    浏览:338

48081b34779beb23b2d13a6f81d3b46c.png

执行结果:

解析:

1、(?<=【)

第一个表达式是一个『非获取匹配』,即匹配括号,但并不获取括号;

2、[^】]+

第二个表达式中[]匹配单个字符,^】代表除了】的字符,+是限定符代表匹配前面子表达式一次或多次,即匹配除了】的连续多个字符;

组合起来即实现了预期效果~

示例:

$strContentInfo = 'tdiv class="abc"ttdiv class="def"t内容t/divttdiv class="def"t内容222t/divtt/divt';

preg_match_all('/tdiv class[^t].*?t((?>[^t\/divt]+|(?R))*)t\/divt/is', $strContentInfo,$matches);

print_r($matches);

其他:

正则表达式的定界符。 除了字母、数字和反斜线\以外的任何字符都可以为定界符号,比如 | |、//、{}、!!等等,但是需要注意,如果没有特殊需要,我们都使用正斜线//作为正则表达式的定界符号。

匹配未知层次的嵌套:

有的正则表达式引擎,专门针对这种嵌套提供了支持。并且在栈空间允许的情况下,能够支持任意未知层次的嵌套:比如 Perl,PHP,GRETA 等。在 PHP 和 GRETA 中,表达式中使用 "(?R)" 来表示嵌套部分。

匹配嵌套了未知层次的 "小括号对" 的表达式写法如下:"\( ([^()] | (?R))* \)"。

模式修正符i:不区分大小写。

m:将字符串通过分隔符进行分割,将字符串中的每一行分别进行匹配。

e: 将匹配出来的内容做一些php语法上的处理。

s: 修正 "." 的换行。

U: 取消贪婪模式。

x: 忽略模式中的空白符。

A: 必须以这个模式开头。

D: 修正 "$" 对 "\n" 的忽略。

u: 做 utf-8 中文匹配的时候使用。

g:该表达式可以进行全局匹配。

贪婪模式

$str ="abcbcd";

$pattern = '/.*/';

preg_match_all($pattern,$str, $matches);

print_r($matches);

这时会匹配出abcbcd,显然不是我想要的结果

如果$pattern = '/.*?/'; 就是我想要的。

所以此处我们要使用 .*?来取消贪婪,?代表匹配前面的内容 0 次或者 1次。

当然取消贪婪还有一种写法:就是在后面加上一个 U ,即:$pattern = '/.*/U';

但是切记不能 .*? 和 U 一起用。

命名捕获组

格式:(?P) 调用方式 (?P=组名)

$regex = '/(?Pchuanshanjia)[\s]Is[\s](?P=author)/i';

$str = 'author:chuanshanjia Is chuanshanjia';

$matches = array();

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "\n";

正则表达式的注释

格式:(?# 注释内容)

用途:主要用于复杂的注释

贡献代码:是一个用于连接MYSQL数据库的正则表达式

$regex = '/

^host=(?

\|

([\w!@#$%^&*()_+\-]+)      (?#用户名)

\|

([\w!@#$%^&*()_+\-]+)      (?#密码)

(?!\|)$/ix';

$str = 'host=192.168.10.221|root|123456';

$matches = array();

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "\n";

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>