\ w的正则表达式匹配行为

时间:2015-02-25 13:02:41

标签: regex

我注意到我正在做的一些正则表达式工作有一些有趣的行为,我想要一些见解。

根据我的理解,字符字符\ w应符合以下[a-zA-Z_0-9]

鉴于此输入,

  

0000000060399301 + 0000000042456971 + 0000000

这个正则表达式应该是什么

  

(\ d +)\ W

拍摄?

我希望它能捕获0000000060399301,但它实际上捕获了000000006039930

我有什么遗失的吗?为什么1从最后掉落?

我注意到我是否将正则表达式更改为

  

(\ d + \ w)的

它正确捕获,即包括1

有人在乎解释吗?感谢

3 个答案:

答案 0 :(得分:3)

您需要正则表达式匹配尾随字符 - 即1

它不能是另一个角色,因为

  • +不是单词类字符
  • +不是数字
  • 匹配是贪婪的

答案 1 :(得分:1)

1被删除,因为\ w不在捕获组中。

答案 2 :(得分:1)

\d+ - 匹配一个或多个数字字符。

\w+ - 匹配一个或多个单词字符。 [A-Za-z\d_]

因此,使用此字符串0000000060399301+,此\d+正则表达式中的(\d+)\w会在最初匹配所有数字(包括+1之前的),因为以下模式为\w,正则表达式引擎尝试查找匹配项,因此它向左回溯一个字符并强制\w+之前的数字匹配。现在,捕获的组包含000000006039930,最后1\w匹配