为什么“\ b”没有在Rails中捕获我的单词边界?

时间:2016-10-12 19:59:33

标签: ruby-on-rails ruby regex word-boundary

我正在使用Rails 4.2.7。我想匹配一个表达式并利用单词边界表达式,因为在我的单词之间可能有空格,任意数量的空格或短划线。但这不起作用

>

这里的手册 - https://ruby-doc.org/core-2.1.1/Regexp.html表明“\ b”是用于捕捉单词边界的正确表达式,所以我想知道我哪里出错了。

1 个答案:

答案 0 :(得分:1)

\b匹配零长度字边界,而不是空格。你正在寻找更像这样的东西:

/first\b.\bsecond/.match('first second')

这将匹配.first之间的任何字符(second),只要两边都有字边界。

但是,这不是通常使用字边界的方式(因为在匹配字边界时不需要使用零长度检查)。 \b基本上是在单词字符后面寻找一个非单词字符;因此,您可以在t中的firsts中的second之间查找非单词字符:

/first\Wsecond/.match('first second')

这与第一个示例完全相同......但是,实际上,您可能只想匹配空格并可以使用以下内容:

/first\ssecond/.match('first second')

@WiktorStribiżew的第三个例子展示了对词边界的最佳使用(在开头和结尾)。这是因为您之前或之后没有匹配任何内容,因此零长度测试很有帮助。否则,上面的示例可以匹配first secondary之类的内容。最后,我会使用如下表达式:

/\bfirst\ssecond\b/.match('first second')