我不知道你所说的“没有工作”的意思。 =~
返回将正则表达式找到了匹配索引:
"The sky is blue....but sometimes it turns to orange." =~ /(the sky is blue)|(orange sky)|(sky is blue but orange)/i
# => 0
0
是其中“天空是蓝色的”发现它的匹配指标。如果找不到匹配,则返回nil
。 0
是“truthy”,nil
在Ruby中是“falsey”,所以匹配的结果可以在if
语句中使用。
如果这些是你正在寻找的确切短语,你现有的正则表达式应该工作得很好。
"The sky is green....but sometimes it turns to orange sky." =~ /(the sky is blue)|(orange sky)|(sky is blue but orange)/i
# => 46
在运行正则表达式之前,可以使用String#squeeze方法删除多个空格。
"The sky is green....but sky is blue but orange sometimes.".squeeze!(" ") =~ /(the sky is blue)|(orange sky)|(sky is blue but orange)/i
# => 24
这有帮助吗?
你的期望输入和期望输出到底是什么? – Cade
我的预期输入是至少2个单词的短语到许多倍数,其中我会选择符合我的正则表达式的特定规则的短语(即,我有我正在寻找的特定短语 - 就像上面关于天空)。重要的是能够查看一串随机数的单词(用空格分隔,甚至是多个空格),并检测我的正则表达式中是否有一个短语出现。 – marcamillion
请注意,a)parens是不必要的,b)您可以使用['Regexp.union'](http://www.ruby-doc.org/core-1.9.3/Regexp.html#)生成文字正则表达式交替方法-c-union):'Regexp.union(“foo bar”,“jim jam”,“yay”)#=>/foo \ bar | jim \ jam | yay /' – Phrogz