0
我有一個模式列表,我想匹配一個字符串與這些模式,但我只需要匹配整個單詞,所以我正在尋找一種方法來動態地將單詞邊界插入到Regexp.union方法,但我錯過了一些東西。 這是我曾嘗試帶有詞邊界的正則表達式聯合
test_string = "lonewolf is lonely"
pattern_list = ["lonely", "wolf", "jungle"]
pattern_list.collect! { |pattern| pattern = "\b" + pattern + "\b"}
patterncollection = Regexp.union(pattern_list)
puts patterncollection
puts test_string.scan(patterncollection)
結果是空的,如果我打印模式集合我看到「\ B」不能正確轉義。 我不能直接在數組中插入「\ b」,因爲該列表會被動態檢索。 我嘗試了多個選項,但仍然沒有運氣。 不同的解決方法是值得歡迎的。
完美!謝謝! – Jack
在正則表達式中嵌入正則表達式時要小心,例如使用'Regexp.union'時。 ''foo'[/ FO#{Regexp.union(['O','B'])}/mix] #=> nil'但是'foo'[/ FO#{Regexp.union(['O ','B'])。source}/mix] #=>「foo」'。除非你絕對肯定你會知道會發生什麼,否則使用'source'。 –
@TheTinMan謝謝,我更新了一個答案。這個特定的輸入沒有問題,但我完全同意值得提及角落案例。 – mudasobwa