あなたが求めていることは完全にはっきりしていませんが、文脈から、配列内の複数のエントリを検索するためのパターンが必要なようです。readlines
は、ファイル。
単純なパターンの例は次のようになります
%w[foo bar baz].grep(/foo|bar/) # => ["foo", "bar"]
|
手段 "または" ので、パターン/foo|bar/
は"foo" or "bar"
を探しています。 grep
は配列['foo', 'bar']
を反復処理し、両方を検出します。
これは、森の中で待っているドラゴンがいるため、全体の解決策ではありません。
最も可能性が高い
ない何をしたいです
%w[food bartender].grep(/foo|bar/) # => ["food", "bartender"]
:/foo|bar/
は実際には部分文字列ではなく、完全な単語を一致しています。
%w[foo bar baz].grep(/\bfoo\b|\bbar\b/) # => ["foo", "bar"]
%w[food bartender].grep(/\bfoo\b|\bbar\b/) # => []
\b
は「単語の境界」は、非単語文字と単語文字間の遷移であることを意味:私たちは言葉を見つけるだけに正規表現エンジンに指示する必要があり、この問題を解決するには
\w
は使用されるパターンで、the Regexp documentationで定義されています。 I STRONGLYには、実行可能なその他の潜在的な問題があるので、それについて読むことをお勧めします。しかし、私たちの目的のためには、\b
とデフォルトの動作はおそらく良いです。
ありその小さなパターンでの重複の多くは、しかしだ、と正規表現は、私たちは、レプリケーションをトリムしてみましょう:
%w[foo bar baz].grep(/\b(foo|bar)\b/) # => ["foo", "bar"]
%w[food bartender].grep(/\b(foo|bar)\b/) # => []
周囲\b
が適用されますので、キャプチャグループに括弧グループfoo|bar
を使用しますかっこの中の何かに、ノイズを減らす。
実際には文字列をキャプチャしたくない場合もあります。そうであれば、ドキュメンテーションの非キャプチャグループについて読むことができます。
これ以上の試みをしたいと思います。あなたは 'string'のために何を使いましたか?なぜそれは動作しませんでしたか? –