Ruby 两个字符串的正则表达式格式

Ruby 两个字符串的正则表达式格式,ruby,regex,Ruby,Regex,我想要一个正则表达式,它将提取单词happy和good,两者都是非贪婪的,并且都不区分大小写 @a = [" I am very HAppy!!", "sad today..", "happy. to hear about this..", "the day is good", "sad one", "sad story"] 看起来这只适用于一个词: @z = @a.join.scan(/\bhappy\b/i) 但当我加入good时,它并不像我期望的那样有效 @z = @a.join.sc

我想要一个正则表达式,它将提取单词happy和good,两者都是非贪婪的,并且都不区分大小写

@a = [" I am very HAppy!!", "sad today..", "happy. to hear about this..", "the day is good", "sad one", "sad story"]
看起来这只适用于一个词:

@z = @a.join.scan(/\bhappy\b/i)
但当我加入good时,它并不像我期望的那样有效

@z = @a.join.scan(/\bhappy|good\b/i) 
期望(快乐的2x和良好的1x):

它给我的结果是:

@z.size => 2

我猜你的意思是,这两个都很幸福,但不好。这是因为你看单词的边界,当你加入字符串时,它就变成了goodsad


删除单词边界条件,它应该与预期匹配。

您应该在替换项周围添加括号,以便
\b
s将作为一个单元应用于
快乐
良好

\b(happy|good)\b
然后,您可能希望扫描
@a
数组中的每个元素,而不是a,并被调用:

@a.map { |s| s.scan(/\b(happy|good)\b/i) }.flatten
# ["HAppy", "happy", "good"]
您还可以使用非捕获组:

\b(?:happy|good)\b
但在这种情况下,它不会有任何区别。

“没有像我预期的那样工作”-你期望什么,它做什么?
\b(?:happy|good)\b