正则表达式与加号量词不符合预期

时间:2014-02-04 16:06:55

标签: regex

我有

  

/ \ d + /

使用字符串>“tom666tom”

它与666匹配。当它击中汤姆的第一个时它不会失败吗?

正则表达式引擎究竟是如何工作的。我知道加号意味着一个或多个。

4 个答案:

答案 0 :(得分:5)

如果你告诉正则表达式应该以这样的数字开头和结尾

,它将会失败
/^\d+$/

^定义字符串的开头,$结束。

答案 1 :(得分:0)

模式搜索输入字符串中的一个或多个数字(+)

答案 2 :(得分:0)

您没有告诉您的表达式匹配整个字符串。如果字符串的任何部分包含一个或多个数字,则它将匹配。使用^(行标记的零长度开始)和$(行标记的零长度结束)来界定正则表达式,并指示该行上唯一的内容应为数字:{{ 1}}。

答案 3 :(得分:0)

因为+

,它在“tom”遇到第一个t时不应该掉下来
  

匹配前面标记中的一个或多个。这是一场贪婪的比赛,而且   在满足下一个之前将匹配尽可能多的字符   令牌。

在正则表达式/\d+/中,+位于\d之后,与任何数字匹配。

如定义所述,正则表达式引擎运行正常,因为它可以与之前的标记(\d)匹配。

所以它会匹配数字直到遇到不匹配。

所以前面的令牌是\d因此,正则表达式引擎工作正常。