php 正则表达式 贪婪模式,20180614 - PHP实战技巧(5)正则表达式之贪婪模式

前言

前两天,写那个PHP错误分析工具,用到了大量的正则表达式,在这里就和大家分享一点点。

什么是正则表达式

对字符串进行深度处理的一个工具,具备自己的一套语法。如果你从未接触过正则表达式,这篇文章可以作为开拓眼界之用。

什么是贪婪模式

想要更多,就是贪婪。非贪婪模式:尽量少的匹配

贪婪模式:尽量多的匹配

举个例子

定义字符串 aaaaa,正则表达式 /a+/(a+表示匹配字母a,1次或多次)

那么匹配结果是 “a” 还是 “aaaaa”?$str = 'aaaaa';

preg_match('/a+/', $str,$out);

var_dump($out);

搞不清的话,可以用上面这段代码,来测试一下。

解题

如果是贪婪模式(尽量多的匹配),就匹配 aaaaa,如果非贪婪模式,则只有一个 a。

答案

上面的匹配结果:aaaaa

说明什么?

PHP中正则表达式,默认就是贪婪模式。

如何关闭贪婪模式

PHP提供了一个正则修饰符“U”(注意,必须是大写的)将表达式改为 /a+/U 即可。$str = 'aaaaa';

preg_match('/a+/U', $str,$out);

var_dump($out);

这次就只匹配一个 a 了。

临时启用贪婪模式

使用“?”号,可以在表达式中,临时启用贪婪模式,比如 /a+?/U 虽然有 U 关闭贪婪模式,但依然可以匹配 aaaaa。$str = 'aaaaa';

preg_match('/a+?/U', $str,$out);

var_dump($out);

警告

正则表达式的语法在不同语言,稍有不同。像 U 这种修饰符,仅限于PHP语言。如果是javascript,则是 g。

使用有些正则表达式测试工具时,贪婪模式的开关看起来可能是不同的。

总结

正则表达式这个鬼东西太抽象,长时间不用总会忘记,不过不用担心,看完文章留个印象,下次需要使用的时候随便查下手册就能适应了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值