2012-05-21 73 views
2

我想要一個正則表達式,它將提取單詞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) 

但是,當我在良好的補充,我希望這是行不通的。

@z = @a.join.scan(/\bhappy|good\b/i) 

事項(開心2X和良好1X):

@z.size => 3 

結果它給了我:

@z.size => 2 
+2

「不按我期望的方式工作」 - 您期望什麼?它有什麼作用? –

回答

7

您應該添加在你的交替的括號以使得\b旨意適用於任何happygood爲單位:

\b(happy|good)\b 

然後,你可能要掃描的@a陣列中的每個元素,而不是@a.join所以mapflatten都呼籲:

@a.map { |s| s.scan(/\b(happy|good)\b/i) }.flatten 
# ["HAppy", "happy", "good"] 

您也可以使用非捕獲組:

\b(?:happy|good)\b 

但在這種情況下它不會有任何區別。

0

我假設你的意思是它匹配既高興,反而不好。這是因爲你在查看單詞邊界,並且當你加入字符串時,它變成了貨物。

刪除字邊界條件,它應該按預期匹配。