1

エラーに対して非常に回復力が必要ないくつかのサーバーで、正規表現の標準 UNIX バージョンを使用しています。何年にもわたって、ユーザーが不正な正規表現を入力したり、ターゲット文字列の奇妙な文字が原因でセグメンテーション違反が発生したりして、サーバーがクラッシュするケースをいくつか発見しました。私たちのシステムでは、これは受け入れられません。

これらの不正なパターンまたは一致文字列でエラーが発生し、サーバーがクラッシュしないような正規表現のバージョンはありますか?

これらのパターンがチェックされているとき、このコードはほとんどマルチスレッドであるため、setjmp longjmp などを使用したくありません。

4

1 に答える 1

2

Go 言語用に Google によって開発されたC++ 正規表現ライブラリがありますRE2が、現在は Perl、Python などのほとんどのスクリプト言語用のラッパーがあり、次のように主張しています。

RE2 はオートマトン理論を使用して、正規表現検索が入力のサイズに比例して時間内に実行されることを保証します。RE2 はメモリ制限を実装しているため、検索を一定量のメモリに制限できます。RE2 は、処理する必要のある入力や正規表現に関係なく、小さな固定 C++ スタック フットプリントを使用するように設計されています。したがって、RE2 は、スレッド スタックが任意に大きくできないマルチスレッド環境で役立ちます。

したがって、高速、信頼性、小型のいずれか 3 つを選択するようです。

于 2012-12-05T10:00:36.353 に答える