3

"\w+([\.\-]?\w+)*@" 文字列に一致するかどうかをテストしようとすると、バグのある正規表現が表示されました

"ffffffffffb3ffffffffffafffffffffffabffffffffffc2ffffffffffa7e"

IE と Chrome がハングアップします。しかし、FFで問題なく動作します。

「?」正規表現では必要ありません。そして、「?」を削除すると、検索が機能します。

しかし、ここで問題の原因がわかりません。ここにいくつかのテストがあります

  1. "\w+([\.\-]?\w+)*"正常に動作します。

  2. "\w+([\.\-]\w+)*@"正常に動作します。

  3. "\w+([\.\-]?\w+)*@"問題を引き起こす

誰でも理由を知っていますか?または、ブラウザ間の単なるパフォーマンスです。

4

1 に答える 1

5

これは壊滅的なバックトラッキングと呼ばれます。

3番目の例では、@(明らかに正規表現が失敗する原因になります)は、正規表現エンジンに\w+(\w+)*(文字クラスはオプションであるため)の可能なすべての順列を試行させます。この長さの文字列を使用すると、計算は宇宙の熱的死までよりも長くかかります。

RegexBuddyスクリーンショット

Firefoxには正規表現の反復制限があるようで、約100万回の試行後に中止されますが、ChromeとIEはここではもう少しストイックなようです。

于 2013-02-06T07:32:04.587 に答える