我对正则表达式有一个非常简单的问题:
源字符串:
名称:Bob Age:20
模式1:[\d]+
模式2:([\d])+
为什么模式1匹配:"20"
而模式2只匹配"0"
?
我知道量词+是贪婪的,所以它匹配一个或多个,但为什么当我用括号括起字符类时,它只匹配最后一个字符?
答案 0 :(得分:2)
它匹配两者。全局匹配是数字,但捕获的匹配是括号之间的匹配,即[\d]
(\d
)。
确切的行为取决于您正在使用的函数/语言:您可能会得到“20”(全局匹配)或“0”(捕获的组)。如果要捕获所有数字,请使用(\d+)
(组内的+)。
答案 1 :(得分:1)
模式1:[\d]+
匹配小数组(零或更多),也可以写成\d+
并匹配20
。
模式2:([\d])+
匹配包含only one
小数的组的捕获(零个或多个),因此它将匹配2
和0
。
另外:
模式3:([\d]+)+
以one or more
方式匹配包含greedy
小数的组的捕获(零个或多个),它将匹配20
。
模式4:([\d]+?)+
以one or more
方式匹配包含lazy
小数的组的捕获(零个或多个),它将匹配2
和0