これを見てください:http://www.boost.org/doc/libs/1_44_0/libs/regex/doc/html/boost_regex/configuration/algorithm.html
再帰的/非再帰的な区別の存在は、BOOST が必ずしも線形時間離散有限状態マシンではないことを強く示唆しています。したがって、特定の問題を改善できる可能性が高くなります。
最良の答えは、持っている干し草の山と針の最小サイズによってかなり異なります. 最小の針が数文字よりも長い場合は、一般化された正規表現ライブラリよりも少しだけうまくいく可能性があります。
基本的にすべての文字列検索は、現在の位置 (カーソル) での一致をテストすることによって機能し、何も見つからない場合は、カーソルをさらに右にスライドさせて再試行します。
Rabin-Karp は、検索対象の文字列 (または複数の文字列) から DFSM を構築し、テストとカーソルの動きが 1 回の操作で結合されるようにします。ただし、Rabin-Karp はもともと 1 つの針用に設計されているため、ある一致が別の一致の適切なプレフィックスになる場合は、バックトラッキングをサポートする必要があります。(コードを再利用したい場合に備えて覚えておいてください。)
もう 1 つの戦術は、可能であれば、カーソルを 1 文字以上右にスライドさせることです。ボイヤー・ムーアはこれを行います。通常、1 本の針用に作られています。すべての文字と、それらが針に現れる右端の位置 (存在する場合) のテーブルを作成します。次に、カーソルを len(needle)-1 に置きます。テーブル エントリは、(a) 針が見つかる可能性があるカーソルからの左方向オフセット、または (b) カーソル len(needle) をさらに右に移動できることを示します。
複数の針がある場合、テーブルの構成と使用はより複雑になりますが、プローブを大幅に節約できる可能性があります。それでも DFSM を作成したい場合がありますが、一般的な検索メソッドを呼び出す代わりに、dos_this_DFSM_match_at_this_offset() を呼び出します。
もう 1 つの戦術は、一度に 8 ビット以上をテストすることです。一度に 32 ビットの機械語を調べるスパムキラー ツールがあります。次に、単純なハッシュ コードを実行して結果を 12 ビットに合わせ、テーブルを調べてヒットがあるかどうかを確認します。パターンごとに 4 つのエントリ (パターンの先頭から 0、1、2、および 3 のオフセット) があり、この方法では、表に何千ものパターンがあるにもかかわらず、サブジェクトの 32 ビット ワードごとに 1 つまたは 2 つしかテストしません。ライン。
したがって、一般的に、はい、針が一定の場合、正規表現よりも速く進むことができます。