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

Regex 的正则表达式匹配行为\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 有人想解释一

我在做一些正则表达式的工作时注意到了一些有趣的行为,我想了解一些情况

据我所知,单词字符,\w应与以下[a-zA-Z_0-9]匹配

鉴于这一投入

00000000 60399301+00000000 42456971+0000000

这个regex应该是什么

(\d+)\w

捕获

我希望它能捕获00000000 60399301,但实际上它捕获00000000 6039930

我有什么遗漏吗?为什么从末尾掉1

我注意到如果我把正则表达式改成

(\d+\w)

它正确地捕获了,即包括1


有人想解释一下吗?谢谢

您需要正则表达式匹配尾随单词字符-这将是
1

它不能是另一个字符,因为

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

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

它不能是另一个字符,因为

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

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

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

\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
匹配