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'を使用する場合など、正規表現を正規表現に埋め込むことに注意してください。 [/ FO#{Reinxp.union(['O'、 'B'])}/mix] #=> nil'しかし '' foo ' '、' B '])。source}/mix] #=> "foo" '何が起こるのか分かっていない限り、 'source'を使用してください。 –
@theTinManありがとう、私は答えを更新しました。この特定の入力に問題はありませんが、コーナーケースについて言及する価値はあると私は完全に同意します。 – mudasobwa