我正在使用Rails 4.2.7。我想匹配一个表达式并利用单词边界表达式,因为在我的单词之间可能有空格,任意数量的空格或短划线。但这不起作用
>
这里的手册 - https://ruby-doc.org/core-2.1.1/Regexp.html表明“\ b”是用于捕捉单词边界的正确表达式,所以我想知道我哪里出错了。
答案 0 :(得分:1)
\b
匹配零长度字边界,而不是空格。你正在寻找更像这样的东西:
/first\b.\bsecond/.match('first second')
这将匹配.
和first
之间的任何字符(second
),只要两边都有字边界。
但是,这不是通常使用字边界的方式(因为在匹配字边界时不需要使用零长度检查)。 \b
基本上是在单词字符后面寻找一个非单词字符;因此,您可以在t
中的first
和s
中的second
之间查找非单词字符:
/first\Wsecond/.match('first second')
这与第一个示例完全相同......但是,实际上,您可能只想匹配空格并可以使用以下内容:
/first\ssecond/.match('first second')
@WiktorStribiżew的第三个例子展示了对词边界的最佳使用(在开头和结尾)。这是因为您之前或之后没有匹配任何内容,因此零长度测试很有帮助。否则,上面的示例可以匹配first secondary
之类的内容。最后,我会使用如下表达式:
/\bfirst\ssecond\b/.match('first second')