75564


お世話になっております。  
以下の正規表現の行があると異常に時間がかかります。  
正規表現じたいは最終的に変換されるようです。  
このサイトではEmEditorで円マークで書いていることがバックスラッシュになって表記されるようです。  
サンプル文はメールさせていただきます。  
[![画像の説明をここに入力](https://i.stack.imgur.com/Q2Vv7.png)](https://i.stack.imgur.com/Q2Vv7.png)

[code]

    batch_list = editor.filters;
    batch_list.AddReplace("[a-zA-Z0-9_+-]+(.[a-zA-Z0-9_+-]+)*@([a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]*\\.)+[a-zA-Z]{2,}$","メール略",eeFindReplaceCase | eeFindReplaceRegExp,0);
    document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo);
    
[/code]

バックトラックについて教えていただきまして追記です。  
回答ありがとうございます。半分解決しました。バックトラックについて理解致しました。  
ただ、もうひとつわからないことは、EmEditorでは遅延する同じサンプル文と正規表現の書き方で秀丸でやると文章も正規表現もまったく同じなのに一瞬で変換されます。

またEmEditorでも同じくらいの文字数でもまったく遅延せずに一瞬で完了するテキストファイルもあります。この差は何でしょうか？  
どのテキストエディタを使っても遅延するということではなく、秀丸だと一瞬です。  
この違いはどこからくるものでしょうか？  
よろしくお願いいたします。


CC BY-SA 4.0
2021-04-24T20:51:34.037
75490
2021-04-29T00:49:12.993
2021-04-25T08:18:11.423
43999
43999
question
正規表現 emeditor
正規表現で異常に時間がかかる書き方があることの原因について


この画面図のダイアログのタイトルにも書かれているように、スクロール バー上のマーカーの更新に時間がかかっていると思われます。したがって、スクロール
バー上のマーカーを無効にしていただければ速くなります。スクロール バー上のマーカーを無効にするには、設定のプロパティの [垂直スクロール
バーにマーカーを表示] の下の [検索文字列] のチェックをクリアしてください。

さらに、正規表現が複雑すぎるために遅くなっています。

`[a-zA-Z0-9_+-]+(.[a-zA-Z0-9_+-]+)*`
という書き方は、複数のグループに任意の回数だけ一致しようとしていいますが、そのような組み合わせは非常に多く考えられるため、遅くなります。

さらに、`[a-zA-Z0-9_+-]+(` の後の `.` は、`\\.` と書く必要があります。

[code]

    batch_list = editor.filters;
    batch_list.AddReplace("[a-zA-Z0-9_+-]+(\\.[a-zA-Z0-9_+-]+)*@([a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]*\\.)+[a-zA-Z]{2,}$","メール略",eeFindReplaceCase | eeFindReplaceRegExp,0);
    document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo);
    
[/code]

とすると速くなります。正規表現はできるだけ簡素化して使用してください。


CC BY-SA 4.0
2021-04-28T18:36:08.353
75564
2021-04-29T00:49:12.993
2021-04-29T00:49:12.993
40017
40017
75490
answer