Ruby和Null字符的正则表达式匹配

时间:2011-12-02 21:19:16

标签: ruby-on-rails ruby regex

我需要匹配一个字符串,以便它不会在一个单词中意外匹配。例如,让我们说我要匹配字符串“de”。我希望它与这些字符串匹配:

"de"
" de"
"de "
" de "
" de  "
"I like the term de very much"

这样的事情,但我不希望它匹配像

这样的字符串
"dead"
" delaware"
"This is delaware"

和ETC.任何人都可以用这样的正则表达式帮助我吗?

2 个答案:

答案 0 :(得分:2)

我认为/^\s*de\s*$/应该适用于匹配' de '等字符串。在这种情况下,^匹配字符串的开头,$ - 字符串结尾,\s* - 空格字符的任何序列(可能为空),de实际上就是你正在寻找。

但是对于一般情况,词边界有特殊符号 - \b。参见示例:

/de/ =~ ' de '       # matches
/de/ =~ ' rder '     # matches as well, but you don't want that

/\bde\b/ =~ 'de'         # matches
/\bde\b/ =~ 'qwe de rew' # matches as 'de' is a separate word
/\bde\b/ =~ ' rder '     # doesn't match as 'de' is not surrounded by word
                         # boundaries so it's not a separate word

答案 1 :(得分:2)

您希望匹配单词de。为此,断言它以字边界开始和结束:

\bde\b

我注意到你的例子只包含只包含一个单词的字符串(带有可选的前导和尾随空格)。但是你的问题没有规定匹配的字符串必须只包含一个单词,因此不清楚这是否是一个要求。上面的正则表达式将匹配包含单词de的字符串,无论字符串中是否还有其他单词。例如,此字符串将匹配:

"here come de judge"

此字符串不会:

"here come der judge"