有什么区别:
(.+?)
和
(.*?)
当我在我的php preg_match
正则表达式中使用它时
答案 0 :(得分:111)
他们被称为量词。
*
前面的表达式中的0个或更多
+
前面一个或多个表达式
默认情况下,量词是贪婪的,这意味着它匹配尽可能多的字符。
量词的?
改变了行为以使这个量词“不合理”,意味着它将尽可能少地匹配。
示例贪婪/不赞成
例如在字符串“ abab ”
上 a.*b
将匹配“abab”(preg_match_all将返回一个匹配,“abab”)
虽然a.*?b
只匹配起始“ab”(preg_match_all将返回两个匹配,“ab”)
您可以在线测试您的正则表达式,例如在Regexr上,see the greedy example here
答案 1 :(得分:17)
第一个(+
)是一个或多个字符。第二个(*
)是零个或多个字符。两者都是非贪婪的(?
)并匹配任何内容(.
)。
答案 2 :(得分:6)
+
匹配前一个模式的一个或多个实例。 *
匹配前一个模式的零个或多个个实例。
所以基本上,如果你使用+
,必须至少有一个模式实例,如果使用*
,如果没有实例,它仍然会匹配。
答案 3 :(得分:6)
+
匹配至少一个字符
*
匹配任何数字(包括0)的字符
?
表示一个惰性表达式,因此它将匹配尽可能少的字符。
答案 4 :(得分:5)
+
是最小的,*
也可以为零。
答案 5 :(得分:4)
下面考虑要匹配的字符串。
ab
模式(ab.*)
将返回匹配结果为ab
虽然模式(ab.+)
不匹配且没有返回任何内容。
但如果您将字符串更改为以下内容,则会为模式aba
返回(ab.+)
aba
答案 6 :(得分:3)
明星与加号非常相似,唯一的区别是,当加号匹配前一个字符/组中的一个或多个时,开头匹配0或更多。
答案 7 :(得分:1)
在RegEx中,//second.js file
alert(globalVariable.test);
表示<script type="text/javascript" src="first.js"></script>
<script type="text/javascript" src="second.js"></script>
与{i,f}
之间的匹配&#34;&#34;。我们来看看以下示例:
i
表示3到7场比赛f
表示最多10场比赛,没有下限(即下限为0){3,7}
表示至少3场没有上限的比赛(即上限是无限的){,10}
表示匹配数没有上限或下限(即下限为0,上限为无穷大){3,}
正好意味着4 大多数优秀语言都包含缩写,RegEx也是如此:
{,}
是{5}
+
是{1,}
*
是{,}
这意味着?
需要至少1个匹配,而{,1}
接受任意数量的匹配或根本不匹配,+
接受不超过1个匹配或零匹配。
信用:Codecademy.com
答案 8 :(得分:0)
我认为以前的答案没有强调一个简单的例子:
例如我们有一个数组:
numbers = [5, 15]
以下正则表达式^[0-9]+
仅匹配:15
。
但是,^[0-9]*
与5 and 15
匹配。区别在于+
运算符需要至少一个前面的正则表达式 重复