正则表达加vs明星差异?

时间:2011-12-20 12:14:03

标签: php regex

有什么区别:

(.+?)

(.*?)

当我在我的php preg_match正则表达式中使用它时

9 个答案:

答案 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匹配。区别在于+运算符需要至少一个前面的正则表达式 重复