0

この正規表現が原因でアプリケーションがハングする理由を誰かが知っていますか?

/^(?:((?:.+?)(?: of the )?)+) of the (?:(.+?)) (?:"(.+?)")$/

次のような文字列を照合するために使用しようとすると、ハングします。

'description of the post "This is a Post"'

しかし、次のような短い文字列と一致させるために使用すると、かなり速く発生するようです。 'age of the person "Bob"'

なぜこれが起こっているのか、またはどうすれば修正できるのかについてのアイデアはありますか?

4

2 に答える 2

2

これは、正規表現での壊滅的なバックトラックの結果です。正規表現の次の部分が原因である可能性があります。

((?:.+?)(?: of the )?)+

ネストされた繰り返しがあるときはいつでも、正規表現をリファクタリングするようにしてください。.+この場合、その部分全体を単純化して、正規表現を同じように動作させることができると思います。

于 2012-08-28T16:53:50.340 に答える
1

これは、バックトラッキング/グループ化が非常に多いため、より大きな文字列を解析するのに時間がかかることが原因である可能性があります。

デモで見ることができるように:http://regex101.com/r/xC3dF0、システムは多数のバックトラックのために文字列を解析できません

于 2012-08-28T16:45:23.573 に答える