提问人:Hack-R 提问时间:3/23/2016 最后编辑:Hack-R 更新时间:3/24/2016 访问量:320
为什么 /([o])\w+/g 与单词不匹配
Why does /([o])\w+/g not match the word to
问:
我正在通过 regexr.com 学习正则表达式,这样在尝试匹配模式时,我就不会那么尴尬可悲了。
该网站提供了正则表达式语句的每个组件的解释,但我无法确定为什么会出现此表达式:
/([o])\w+/g
与单词“to”的任何部分都不匹配:
我的理解是,它应该与字母和开关相匹配(或者你怎么称呼它......旗?选项?告诉它匹配单词。[o]
o
\w
我也会从解释为什么它只匹配以及单词后面的字母(例如 在单词 Welcome) 而不是包含字母的整个单词中)。o
o
ome
o
最后,的解释告诉我,它的意思是“匹配前面的 1 个或多个标记”,而切换它似乎可以控制是否只匹配 1 个字母,或者单词后面的所有字母都匹配。对此的澄清将不胜感激。+
o
o
对于新手的问题,我深表歉意。
答:
6赞
Sergey Kalinichenko
3/23/2016
#1
\w
不是开关,而是单词字符的字符类。的确切含义取决于系统,但至少必须匹配。在您的示例中,字母后面跟着一个空格,这是一个非单词字符。由于限定符后面需要一个或多个单词字符,因此该单词不匹配。\w
[A-Za-z0-9_]
"to"
"o"
+
"o"
"to"
评论
1赞
Hack-R
3/23/2016
哦,好吧,谢谢,这开始有意义了。所以,即使 is 在单词中,它也不是匹配的,因为要求匹配字符之后的下一个字符在一个单词中?o
to
\w
0赞
Sergey Kalinichenko
3/23/2016
@Hack-R 是的,没错。
0赞
Hack-R
3/24/2016
完美,谢谢。一旦 7 分钟的最短时间过去,我将接受此作为解决方案。
2赞
Felix Kling
3/24/2016
@Hack-R:可以肯定的是:如果你有表达式,那么只有序列才会匹配,这些序列实际上由一个后跟一个组成。 仅匹配由 后跟任何字符组成的序列 to 、 to 、 to 或 。所以这些会匹配:、、、、,但不是、、等。oa
o
a
o\w
o
A
Z
a
z
0
9
_
oC
oc
o5
o_
o%
o+
o a
0赞
Hack-R
3/24/2016
@FelixKling噢噢!是的,这确实使它更加清晰。你震撼了我的世界!
2赞
Jan
3/23/2016
#2
实际上会匹配这个词(不是在或在)。
是一个单词边界,同时匹配任何单词字符。 至少匹配一个单词字符,连续无限次。
RegexOne 是学习正则表达式的良好起点。\b\w+\b
to
towards
toe
\b
\w
\w+
评论
0赞
Hack-R
3/23/2016
谢谢。我会审查那个网站。如果您可以对问题中的陈述添加更多解释,那会有所帮助,尽管我认为@dasblinkenlight已经为我提供了一些启示。
2赞
ʰᵈˑ
3/23/2016
很好,但为什么。OP 似乎没有掌握正则表达式的某些方面,并在这里寻求理解
0赞
Jan
3/24/2016
@hd ˑ:你说得对。
0赞
Jan
3/24/2016
@Hack-R:是单词边界,同时匹配任何单词字符。 至少匹配一个单词字符,连续无限次。\b
\w
\w+
0赞
Hack-R
3/24/2016
@Jan啊,好吧,太好了。谢谢你的回答;我会+1。
评论
\w
是一个单词字符(通常是带下划线的字母数字),因此不匹配,因为后面没有更多的单词字符to
/[o]\w+/g
to
\w
[a-zA-z0-9_]
\d
[0-9]