这个问题已经有答案了:
Reference - What does this regex mean?(1个答案)
两年前关门了。
以下两者之间的区别是什么:
(.+?)
和
(.*?)
当我在我的php preg_match
regex中使用它时?
这个问题已经有答案了:
Reference - What does this regex mean?(1个答案)
两年前关门了。
以下两者之间的区别是什么:
(.+?)
和
(.*?)
当我在我的php preg_match
regex中使用它时?
9条答案
按热度按时间dohp0rv51#
它们被称为量词。
*
前面表达式的0个或多个+
前面表达式的1个或多个默认情况下,量词是贪婪的,这意味着它匹配尽可能多的字符。
量词后的
?
改变了行为,使这个量词“不贪婪”,这意味着它将尽可能少地匹配。示例贪婪/不贪婪
例如,在字符串“abab”上
a.*b
将匹配“abab”(preg_match_all将返回一个匹配,即“abab”)而
a.*?b
将只匹配开始的“ab”(preg_match_all将返回两个匹配,“ab”)你可以在线测试你的正则表达式,例如。在Regexr、see the greedy example here上
7rfyedvj2#
第一个(
+
)是 * 一个或多个字符 *。第二个(*
)是 * 零个或多个字符 *。两者都有贪婪(默认)和懒惰(
?
)变体yrwegjxp3#
在RegEx中,
{i,f}
表示“i
到f
之间的匹配”。我们来看一下以下例子:{3,7}
表示3到7个匹配项{,10}
表示最多10场比赛,没有下限(即下限为0){3,}
表示至少3次匹配,没有上限(即上限为无穷大){,}
表示匹配数量没有上限或下限(即,下限为0,上限为无穷大){5}
表示4大多数好的语言都包含缩写,RegEx也是如此:
+
是{1,}
的简写*
是{,}
的简写?
是{,1}
的简写这意味着
+
需要至少1个匹配,而*
接受任何数量的匹配或根本没有匹配,?
接受不超过1个匹配或零个匹配。图片来源:Codecademy.com
hxzsmxv24#
+
至少匹配一个字符*
匹配任意数量(包括0)的字符?
表示一个惰性表达式,因此它将匹配尽可能少的字符。rxztt3cl5#
+
匹配前面模式的一个或多个示例。*
匹配前面模式的零个或多个示例。所以基本上,如果你使用
+
,那么必须至少有一个模式的示例,如果你使用*
,如果没有它的示例,它仍然会匹配。rt4zxlrg6#
下面是要匹配的字符串。
模式
(ab.*)
将返回捕获组的匹配结果ab
而模式
(ab.+)
将不匹配,不返回任何东西。但如果将字符串更改为following,它将返回
(ab.+)
模式的aba
2exbekwf7#
+
是最小值,*
也可以是零。noj0wjuj8#
星星与加号非常相似,唯一的区别是加号匹配前面的1个或多个字符/组,而星星匹配0个或多个。
njthzxwz9#
我认为前面的答案没有突出一个简单的例子:
例如,我们有一个数组:
以下正则表达式
^[0-9]+
匹配:15
仅限。但是,^[0-9]*
与5 and 15
都匹配。不同之处在于+
运算符要求前面的正则表达式至少有一个 * 重复**