タグ: 正規表現
- 作成者投稿
- 2024年11月14日 12:02 am #32061yasuji参加者
江村様
いつもお世話になっております。
yasujiです。1.4 GBのテキストファイル(合計 61689810 行)を開いて[正規表現で検索する追加行数(L)]を2147483647に設定して、正規表現検索を行うと「メモリリソースが不足しているため、この操作を完了できません。」のメッセージが表示され、正規表現検索が実行できないバグ。
上記不具合の発生の再現手順は下記の通りです。
〔対象〕
v24.4.1 (64bit)〔使用環境〕
CPU : AMD Ryzen 9 3900X 12-Core Processor 3.80 GHz
RAM : 128 GB
OS : Windows 10 Pro 64bit 22H2 build 19045.5011
MB : ASUS PRIME X570-PRO〔再現手順〕
0.事前準備
WikipediaのDatabase backup dumpsのファイルをダウンロードして、それぞれ展開する。展開のファイルサイズは、非常に大きいためディスクの空き容量に注意すること。
enwiki-20241020-all-titles.gz (file size: gz 339.3 MB, txt 1.4 GB)なお、上記のファイルは、2024/11/13時点ではダウンロードできるが、3カ月程度でローテーションするため、最新の日付のURLからダウンロードする必要がある。
1.EmEditor 64bit ポータブル版を初期状態で起動
zipファイルから展開して、起動する。
初回のエディション選択は、Professionalを選択する。2.ファイルを開く
enwiki-20241020-all-titlesを開く。開く処理が終わるまで待つ。
3.検索を開いて、下記の通り設定する
[検索する文字列]
\R
(\r\n)
\x{0d}\x{0a}
(\n)
[\r\n]
上記の正規表現文字列から一つを選択して設定する。どれを選択しても同じ結果になる。〔チェックボックス〕
[大文字と小文字を区別する(C)]:ON
[一致する文字列を数える(U)]:ON
上記以外のチェックボックスすべて:OFF
〔ラジオボタン〕
[正規表現(X)]:ON[高度]
〔チェックボックス〕
[CRとLFを区別する(T)]:ON
[次を検索/前を検索で重ならない文字列のみ一致する(F)]:ON
上記以外のチェックボックスすべて:OFF
[正規表現エンジン(G)]:Onigmo.Perl
[正規表現で検索する追加行数(L)]:2147483647問題が発生する[正規表現で検索する追加行数(L)]は、下記の通り。ただし、2147483629とその近傍の数値では問題が発生しない正規表現文字列がある。
数値範囲:2147483629 ~ 2147483647※2147483647 は[正規表現で検索する追加行数(L)]を下記の通りに設定して[OK]して再度[高度]を開くことで得られる。
999999999999 ==> 21474836474.[次を検索]を実行する
5.結果の確認
[正規表現エンジン(G)]が、Onigmo.PerlまたはBoost.Regexのどちらでも、「メモリリソースが不足しているため、この操作を完了できません。」のメッセージボックスが表示され、正規表現検索ができない。[正規表現エンジン(G)]が Onigmo.Perl, Boost.Regex 以外の検索エンジンについては試していない。
2024年11月16日 10:52 am #32070Yutaka Emuraキーマスターいつもお世話になっております。江村です。
既に、こちらでは修正いたしました。次に公開されるバージョンでは修正されています。
よろしくお願いいたします。
2024年11月17日 12:42 am #32076yasuji参加者江村様
いつもお世話になっております。
yasujiです。承知しました。次の新バージョンが公開されたときに確認します。
よろしくお願いします。
2024年11月25日 11:11 pm #32103yasuji参加者江村様
いつもお世話になっております。
yasujiです。v24.4.902 (64bit)について、この不具合の修正確認を行った結果、下記の通り不具合が発生しております。
再度、修正対応をお願いします。〔確認結果〕
[検索する文字列]に\R
、(\n)
、[\r\n]
のどれかを設定した場合:
[次を検索]を押下した直後に下記の内容で[OK]または[キャンセル]ボタンのあるメッセージボックスが表示される。
「Onigmo 正規表現エンジンの内部でアクセス違反例外が発生しました。この問題を回避するには、正規表現の簡素化を試みてください。[OK]をクリックすると、無視して継続します。[キャンセル]をクリックすると、異常終了します。」
[OK]を押下すると、検索処理が続行されるがすぐに応答なしになる。
[キャンセル]を押下すると、クラッシュレポート画面が表示されて、その後に表示される画面から[EmEditorを終了]ボタンを押下して終了になる。[検索する文字列]に
(\r\n)
、\x{0d}\x{0a}
のどれかを設定した場合:
検索進捗ウィンドウが表示されず、検索ウィンドウが応答なしになり、回復する見込みがないため強制終了するしかなくなる。よろしくお願いします。
2024年11月26日 2:35 am #32108Yutaka Emuraキーマスターいつもお世話になっております。江村です。
こちらでは問題は再現しませんが、アクセス違反例外が発生したのでしたら、正規表現がそれほどに長い文字列を想定していないからだと考えられます。
もともと、[正規表現で検索する追加行数(L)]にはそれほど大きな値を想定しておりませんので、より小さな値を指定することをお勧めいたします。
何かご意見やご質問がありましたら、どうぞ私宛にメールでご連絡ください。
よろしくお願いいたします。
- 作成者投稿
- このトピックに返信するにはログインしてください。