正则表达式捕获组

时间:2013-10-14 15:35:11

标签: regex

我对正则表达式有一个非常简单的问题:

源字符串: 名称:Bob Age:20

模式1:[\d]+

模式2:([\d])+

为什么模式1匹配:"20"而模式2只匹配"0"

我知道量词+是贪婪的,所以它匹配一个或多个,但为什么当我用括号括起字符类时,它只匹配最后一个字符?

2 个答案:

答案 0 :(得分:2)

它匹配两者。全局匹配是数字,但捕获的匹配是括号之间的匹配,即[\d]\d)。

确切的行为取决于您正在使用的函数/语言:您可能会得到“20”(全局匹配)或“0”(捕获的组)。如果要捕获所有数字,请使用(\d+)(组内的+)。

答案 1 :(得分:1)

模式1:[\d]+匹配小数组(零或更多),也可以写成\d+并匹配20

模式2:([\d])+匹配包含only one小数的组的捕获(零个或多个),因此它将匹配20

另外

模式3:([\d]+)+one or more方式匹配包含greedy小数的组的捕获(零个或多个),它将匹配20

模式4:([\d]+?)+one or more方式匹配包含lazy小数的组的捕获(零个或多个),它将匹配20