php正则表达式非贪婪模式

作者

php正则表达式中,贪婪模式就是尽量多的匹配,非贪婪模式就是尽量少的的匹配。可以使用惰性限定符或者修饰符来进行处理。修饰符是整个正则表达式进行处理,而惰性限定符可以控制的更为精准。下面给出一个例子。

首先看一个默认是输出

$str = 'this a img <img src="mypic.jpg"/> , goog jpg ha ha';
preg_match('/src.*jpg/', $str, $match);
var_dump($match);

输出的结果

array(1) {
  [0]=>
  string(28) "src="mypic.jpg"/> , goog jpg"
}

可以看到本意是想输出图片的地址,但是因为是贪婪的模式,所以多输出了一部分。有两个jpg,贪婪就是尽量的多获取,就一直获取到最后一个。

非贪恋模式获取

php 使用修饰符U来进行非贪婪模式的匹配。

$str = 'this a img <img src="mypic.jpg"/> , goog jpg ha ha';
preg_match('/src="(.*jpg)"/U', $str, $match);
var_dump($match);

php 使用惰性限制(?)符实现贪婪匹配。

$str = 'this a img <img src="mypic.jpg"/> , goog jpg ha ha';
preg_match('/src=".*?\.jpg"/', $str, $match);
var_dump($match);
惰性限制规则 含义
?? 重复1次户或者多次,最后一个问号表示尽量少的重复次数
+? 重复1词或者多次, 最后一个问号表示尽量少的重复次数
{n,m}? 重复至少n词,最多m词,最后一个问号表示尽量少的重复次数
{n,}? 至少重复n词, 最后一个问号表示尽量少的重复次数
*? 重复人次次数, 最后一个问号表示尽量少的重复次数

回复

电子邮件地址不会被公开。