中途半端な正規表現で検索すると応答なしになる

  1. abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcd

    という文字列を含む文章で、正規表現にチェックを入れ

    a(b|)+d

    で検索すると Mery が応答なしになってしまいます。

    上記文字列の b の部分が長いほど応答なしになりやすく、短いと応答なしにならない場合がありますが、その後操作が重くなることがあります。

    試したところ以下でも同様に応答なしになりました。
    a(b|)*d
    a(b|)+?d
    a(b|)*?d

    意図的に a(b|)+d で検索するケースはないかもしれませんが、本来 a(b|c)+d とするところ誤って検索した場合や、インクリメンタルサーチで偶然この形になるといったケースが考えられます。

    ■ 検証環境
    OS: Windows 10 1909 64bit (OSビルド 18363.592)
    CPU: Intel Core i5-6200U
    メモリ: 8GB
    グラフィック: Intel HD Graphics 520
    Mery: 2.6.7 と 2.8.8 (共に 64 ビット版で設定は初期状態)

     |  ucky  |  返信
  2. ご報告ありがとうございます。

    頂いた手順で現象を再現することができました。

    調査してみましたところ、どうも正規表現ライブラリの鬼雲がフリーズしているようです。

    他のテキストエディターでも試してみましたが…

    ・秀〇さん + hmonig.dll → 応答なし
    ・E〇Editor さん (設定で Onigmo 使用) → 応答なし
    ・サク〇エディタさん + bregonig.dll → 応答なし
    ・gP〇d さん + bregonig.dll → 応答なし

    ということで、鬼雲を使うといずれもフリーズしてしまうようです。

    Mery を使用せず、鬼雲を利用するだけの単純なプログラムでも、問題の正規表現を鬼雲の API に渡してやるだけでフリーズして制御が戻ってきませんので、鬼雲を利用するアプリ側からは対策の余地がなさそうです。

     |  Kuro  |  返信
  3. > Mery を使用せず、鬼雲を利用するだけの単純なプログラムでも、問題の正規表現を鬼雲の API に渡してやるだけでフリーズして制御が戻ってきませんので、鬼雲を利用するアプリ側からは対策の余地がなさそうです。

    承知しました。

    お忙しいところ調査していただきありがとうございました。

     |  ucky  |  返信
スポンサーリンク