之间有什么区别?
(.+?)
和
(.*?)
当我在phppreg_match
正则表达式中使用它时?
Answers:
它们称为量词。
*
0个或多个前面的表达式
+
前一个或多个表达式
默认情况下,量词是贪婪的,这意味着它匹配尽可能多的字符。
在?
一个量词后改变行为,使这个量词“ungreedy”,意味着它会匹配尽可能少。
贪婪/贪婪的例子
例如,在字符串“ abab ”上
a.*b
将匹配“ abab”(preg_match_all将返回一个匹配项,即“ abab”)
而a.*?b
仅匹配开头的“ ab”(preg_match_all将返回两个匹配“ ab”)
您可以在线测试您的正则表达式,例如在Regexr上,请参见此处的贪婪示例
(.+?)
和(.*?)
行为不同的正则表达式的不同位置a(.+?)
,(.+?)b
,a(.+?)b
,a(.*?)
,(.*?)b
,a(.*?)b
。
.*
将尽可能匹配。如果你想停止尽早,那么你就必须使它ungreedy.*?
+
至少匹配一个字符
*
匹配任意数量(包括0)的字符
该?
指示慵懒的表情,所以它会匹配尽可能少的字符越好。
考虑以下是要匹配的字符串。
ab
该模式(ab.*)
将返回与捕获组匹配的结果ab
虽然模式(ab.+)
将不匹配,并且不返回任何内容。
但是,如果将字符串更改为following,它将返回aba
为pattern(ab.+)
aba