Regex 的正则表达式匹配行为\w
我在做一些正则表达式的工作时注意到了一些有趣的行为,我想了解一些情况 据我所知,单词字符,\w应与以下[a-zA-Z_0-9]匹配 鉴于这一投入 00000000 60399301+00000000 42456971+0000000 这个regex应该是什么 (\d+)\w 捕获 我希望它能捕获00000000 60399301,但实际上它捕获00000000 6039930 我有什么遗漏吗?为什么从末尾掉1 我注意到如果我把正则表达式改成 (\d+\w) 它正确地捕获了,即包括1Regex 的正则表达式匹配行为\w,regex,Regex,我在做一些正则表达式的工作时注意到了一些有趣的行为,我想了解一些情况 据我所知,单词字符,\w应与以下[a-zA-Z_0-9]匹配 鉴于这一投入 00000000 60399301+00000000 42456971+0000000 这个regex应该是什么 (\d+)\w 捕获 我希望它能捕获00000000 60399301,但实际上它捕获00000000 6039930 我有什么遗漏吗?为什么从末尾掉1 我注意到如果我把正则表达式改成 (\d+\w) 它正确地捕获了,即包括1 有人想解释一
有人想解释一下吗?谢谢您需要正则表达式匹配尾随单词字符-这将是
1
它不能是另一个字符,因为
不是词类字符+
不是数字+
- 匹配是贪婪的
1
它不能是另一个字符,因为
不是词类字符+
不是数字+
- 匹配是贪婪的
\d+
-匹配一个或多个数字字符
\w+
-匹配一个或多个单词字符<代码>[A-Za-z\d.]
因此,对于这个字符串
00000000 60399301+
,\d+
中的(\d+)\w
正则表达式首先匹配所有数字(包括前面的1+),因为下面的模式是\w
,所以正则表达式引擎尝试查找匹配,因此,它将一个字符回溯到左侧,并强制\w
与+
之前的数字匹配。现在,捕获的组包含00000000 6039930
,最后一个1
由\w
\d+
-匹配一个或多个数字字符
\w+
-匹配一个或多个单词字符<代码>[A-Za-z\d.]
因此,对于这个字符串00000000 60399301+
,\d+
中的(\d+)\w
正则表达式首先匹配所有数字(包括前面的1+),因为下面的模式是\w
,所以正则表达式引擎尝试查找匹配,因此,它将一个字符回溯到左侧,并强制\w
与+
之前的数字匹配。现在捕获的组包含00000000 6039930
,最后一个1
与\w
匹配