为什么/([o])\w+/g不能匹配单词to?

3
我正在通过regexr.com学习正则表达式,以便在尝试匹配模式时不那么令人尴尬和不堪入目。
该网站为正则表达式语句的每个组成部分提供了解释,但我无法确定为什么这个表达式: /([o])\w+/g 不能匹配单词“to”的任何部分。

regexr

我的理解是[o]应该匹配字母o,而\w开关告诉它去匹配单词。我还需要解释一下为什么它只匹配单词中o后面的字母(例如单词Welcome中的ome),而不是包含字母o的整个单词。最后,对于+的解释告诉我它意味着“匹配前面的标记1次或多次”,而切换这个似乎控制着是否只匹配o后面的1个字母,或者匹配单词中o后面的所有字母。非常感谢您对此进行澄清。抱歉问题有点初学者。

\w 是一个单词字符(通常是字母数字和下划线),因此 to 不匹配 /[o]\w+/g,因为在 to 之后没有更多的单词字符。 - BeyelerStudios
@BeyelerStudios 谢谢,你能再解释一下吗?这意味着如果匹配的字符后面跟着其他字符,就要匹配那些字符吗? - Hack-R
1
@Hack-R:\w只是[a-zA-z0-9_]的简写。就像\d[0-9]的简写一样。请参见http://www.regular-expressions.info/shorthand.html。 - Felix Kling
2个回答

6

\w 不是一个开关,它是一个用于匹配单词字符的字符类。 \w 的确切含义取决于系统,但至少它必须匹配 [A-Za-z0-9_]。在你的例子中,在字母 "o" 后面有一个空格,这是一个非单词字符。由于 + 限定符需要在 "o" 之后匹配一个或多个单词字符,所以单词 "to" 不匹配。


1
哦,好的,谢谢,我开始理解了。所以,即使“o”在单词“to”中,它也不匹配,因为“\w”要求匹配字符后面的下一个字符在单词中? - Hack-R
@Hack-R 是的,没错。 - Sergey Kalinichenko
好的,谢谢。我会在7分钟后最短时间内接受这个解决方案。 - Hack-R
2
@Hack-R:只是为了确认一下:如果你有表达式oa,那么只有由oa直接相连的序列才会被匹配。o\w只匹配由o后面跟着字符集合AZaz09_中的任意一个字符组成的序列。所以这些会被匹配:oCoco5o_,但不会匹配o%o+o a等。 - Felix Kling
@FelixKling 哦哦哦哦!是的,这确实让它更清晰了。你真是让我惊艳! - Hack-R

2
实际上,\b\w+\b 可以匹配单词 to(但不匹配 towardstoe)。
\b 是单词边界,而 \w 匹配任何单词字符。 \w+ 连续匹配至少一个单词字符。
RegexOne 是学习正则表达式的好起点。

谢谢。我会查看那个网站。如果您能在问题陈述中添加更多解释,那将有所帮助,尽管我认为@dasblinkenlight已经为我提供了一些启示。 - Hack-R
2
不错,但是为什么。楼主似乎没有掌握正则表达式的某些方面,并在这里寻求理解。 - ʰᵈˑ
@Hack-R:\b是单词边界,而\w匹配任何单词字符。\w+匹配至少一个单词字符,连续无限次。 - Jan
@ʰᵈˑ:我猜这更像是一条评论,而我有点累了 :) - Jan
@Jan,请使用这个链接更新你的答案。 - ʰᵈˑ
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接