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词, 后一个问号表示尽量少的重复次数 |
*? | 重复人次次数, 后一个问号表示尽量少的重复次数 |