2

ページの応答時間を 0.7 秒から 10 秒に短縮するため、この式を (より大きな正規表現で) 絞り込みました。

[^\.]{10,}[\.\?\!]\s*$

これは、少なくとも 10 文字の長さの文を検出することを目的としています (完全ではなく、自然言語解析の恩恵を受けることはわかっています) ... しかし、この表現の一体何が原因で、ページの応答時間がそれほど爆発するのでしょうか?

正規表現自体には他のコンポーネントがあるため、責任はありません。

private static Regex innerTextFilterEx = new Regex(@"part1|part2|<faulty-part-above>", RegexOptions.Compiled | RegexOptions.IgnoreCase);

削除<faulty-part-above>は 0.7 秒で実行され、追加は 10 秒以上に戻ります。

4

1 に答える 1

1

この種の問題の最も一般的な原因は、正規表現エンジンがバックトラックしすぎる原因となるいくつかの方法に一致する可能性がある代替です。ですからまず、あなたの「一見無邪気な」表現の文脈重要だということです。

一見無邪気な表情を交互に最初に置くことで違いはありますか?検索される文字列の長さはどの程度違いますか?

特に、交代のさまざまな部分にある数量詞に注意してください。件名の一部が交替のいずれかの部分で一致する可能性があるシナリオはありますか? (たとえば、* は何かの 0 回のインスタンスに一致することがあります。それが必要ですか? 代替間の相互作用を見てください。

于 2012-05-15T21:15:57.823 に答える