1. ホーム
  2. ruby

[解決済み] Rubyで文字列が正規表現にマッチするかどうかをチェックする最も速い方法?

2022-10-02 15:47:01

質問

Rubyで文字列が正規表現にマッチするかどうかを確認する最も速い方法は何ですか?

私の問題は、実行時に与えられた正規表現に一致するものを見つけるために、文字列の巨大なリストを "egrep" しなければならないということです。 私は文字列が正規表現に一致するかどうかだけを気にしており、一致する場所や一致するグループのコンテンツが何であるかは気にしていません。 この仮定を利用して、私のコードが正規表現のマッチングに費やす時間を減らせればと思います。

で正規表現を読み込みます。

pattern = Regexp.new(ptx).freeze

私が見つけたのは string =~ pattern よりもわずかに速いことがわかりました。 string.match(pattern) .

このテストをさらに速くするために使える、他のトリックやショートカットはありますか?

どのように解決するのですか?

Ruby 2.4.0からは RegExp#match? :

pattern.match?(string)

Regexp#match? は、パフォーマンス向上として明示的に のリリースノートで のような他のメソッドで行われるオブジェクトの割り当てを避けることができるためです。 Regexp#match=~ :

Regexp#match?

追加 Regexp#match? これは、後方参照オブジェクトを作成し $~ を変更し、オブジェクトの割り当てを減らすことができます。