タグ: 正規表現不具合
- 作成者投稿
- 2024年8月30日 11:43 pm #31888yasuji参加者
江村様
いつもお世話になっております。
yasujiです。正規表現置換で、検索文字列を[“()]+(?:\r\n|[\r\n])|[“()]+に設定し、置換文字列を空にして、特定行のみを行削除する置換を実行すると1行目のみ行削除され、以降は空行が残る不具合の連絡です。
上記不具合の発生の再現手順は下記の通りです。
〔対象〕
v24.3.2 (64bit)〔使用環境〕
OS: Windows 10 Pro 64bit, ver 22H2〔再現手順〕
1.EmEditor 64bit ポータブル版を初期状態で起動
zipファイルから展開して、起動する。
初回のエディション選択は、Professionalを選択する。2.開いている文書タブに適当なテキストの入力
例えば、下記のようなテキストを文書タブに入力して未保存状態にする。"( AAAAAAAAAAAAAAA BBBBBBBBBBBBBB )" CCCCCCCCCCCC DDDDDDDDDDD ( AAAAAAAAAAAAAAA BBBBBBBBBBBBBB ) "( AAAAAAAAAAAAAAA BBBBBBBBBBBBBB )" -------
3.置換を開いて、下記の通り設定する
[検索する文字列]
[“()]+(?:\r\n|[\r\n])|[“()]+[置換後の文字列](空に設定する)
〔チェックボックス〕
チェックボックスすべて:OFF
〔ラジオボタン〕
[正規表現(X)]:ON[高度]
〔チェックボックス〕
[CRとLFを区別する(T)]:ON
[次を検索/前を検索で重ならない文字列のみ一致する(F)]:ON
上記以外のチェックボックスすべて:OFF
[正規表現エンジン(G)]:既定(Boost.Regex)
[正規表現で検索する追加行数(L)]:04.すべて置換を実行する
5.結果の確認
1行目の “( は行ごと削除されるが、それ以降は空行になる。
本来は、条件に一致する行がすべて削除されなければならい。
[正規表現エンジン(G)]をOnigmoに変更しても同じ結果になる。AAAAAAAAAAAAAAA BBBBBBBBBBBBBB CCCCCCCCCCCC DDDDDDDDDDD AAAAAAAAAAAAAAA BBBBBBBBBBBBBB AAAAAAAAAAAAAAA BBBBBBBBBBBBBB -------
6.検証
6.1 置換を開いて、下記の通り設定する
3.の設定手順のうち、下記の項目のみ変更して、設定する。
[検索する文字列]
[“()]+(?:\r\n|[\r\n])6.2 [すべて置換]を実行する
6.3 確認
期待通りの下記の結果になる。本来は、5.の置換結果が下記と同一の結果にならなければならない。
最左から一致するものを優先的にマッチさせるため。AAAAAAAAAAAAAAA BBBBBBBBBBBBBB CCCCCCCCCCCC DDDDDDDDDDD AAAAAAAAAAAAAAA BBBBBBBBBBBBBB AAAAAAAAAAAAAAA BBBBBBBBBBBBBB -------
7.検証2
7.1 Notepad++を開いて2.を入力する7.2 置換を開いて、下記の通り設定する
3.の設定手順のうち、下記の項目のみ変更して、設定する。
[検索する文字列]
[“()]+(?:\r\n|[\r\n])|[“()]+[置換後の文字列](空に設定する)
〔チェックボックス〕
[先頭/末尾から再検索(P)]:ON
上記以外のチェックボックスすべて:OFF
〔検索モード〕
[正規表現(G)]:ON
[.は改行と一致]:OFF7.2 [すべて置換]を実行する
7.3 結果の確認
期待通りの下記の結果になる。AAAAAAAAAAAAAAA BBBBBBBBBBBBBB CCCCCCCCCCCC DDDDDDDDDDD AAAAAAAAAAAAAAA BBBBBBBBBBBBBB AAAAAAAAAAAAAAA BBBBBBBBBBBBBB -------
2024年8月31日 12:16 am #31894yasuji参加者すみません。上記の正規表現の部分にcodeタグを使用しなかったため、ダブルクォーテーションの文字が意図していない文字に変換されてしまいました。そのため、codeタグを入れたものを再度掲載します。
———————————
江村様いつもお世話になっております。
yasujiです。正規表現置換で、検索文字列を
["()]+(?:\r\n|[\r\n])|["()]+
に設定し、置換文字列を空にして、特定行のみを行削除する置換を実行すると1行目のみ行削除され、以降は空行が残る不具合の連絡です。上記不具合の発生の再現手順は下記の通りです。
〔対象〕
v24.3.2 (64bit)〔使用環境〕
OS: Windows 10 Pro 64bit, ver 22H2〔再現手順〕
1.EmEditor 64bit ポータブル版を初期状態で起動
zipファイルから展開して、起動する。
初回のエディション選択は、Professionalを選択する。2.開いている文書タブに適当なテキストの入力
例えば、下記のようなテキストを文書タブに入力して未保存状態にする。"( AAAAAAAAAAAAAAA BBBBBBBBBBBBBB )" CCCCCCCCCCCC DDDDDDDDDDD ( AAAAAAAAAAAAAAA BBBBBBBBBBBBBB ) "( AAAAAAAAAAAAAAA BBBBBBBBBBBBBB )" -------
3.置換を開いて、下記の通り設定する
[検索する文字列]
["()]+(?:\r\n|[\r\n])|["()]+
[置換後の文字列](空に設定する)
〔チェックボックス〕
チェックボックスすべて:OFF
〔ラジオボタン〕
[正規表現(X)]:ON[高度]
〔チェックボックス〕
[CRとLFを区別する(T)]:ON
[次を検索/前を検索で重ならない文字列のみ一致する(F)]:ON
上記以外のチェックボックスすべて:OFF
[正規表現エンジン(G)]:既定(Boost.Regex)
[正規表現で検索する追加行数(L)]:04.すべて置換を実行する
5.結果の確認
1行目の “( は行ごと削除されるが、それ以降は空行になる。
本来は、条件に一致する行がすべて削除されなければならい。
[正規表現エンジン(G)]をOnigmoに変更しても同じ結果になる。AAAAAAAAAAAAAAA BBBBBBBBBBBBBB CCCCCCCCCCCC DDDDDDDDDDD AAAAAAAAAAAAAAA BBBBBBBBBBBBBB AAAAAAAAAAAAAAA BBBBBBBBBBBBBB -------
6.検証
6.1 置換を開いて、下記の通り設定する
3.の設定手順のうち、下記の項目のみ変更して、設定する。
[検索する文字列]
["()]+(?:\r\n|[\r\n])
6.2 [すべて置換]を実行する
6.3 確認
期待通りの下記の結果になる。本来は、5.の置換結果が下記と同一の結果にならなければならない。
最左から一致するものを優先的にマッチさせるため。AAAAAAAAAAAAAAA BBBBBBBBBBBBBB CCCCCCCCCCCC DDDDDDDDDDD AAAAAAAAAAAAAAA BBBBBBBBBBBBBB AAAAAAAAAAAAAAA BBBBBBBBBBBBBB -------
7.検証2
7.1 Notepad++を開いて2.を入力する7.2 置換を開いて、下記の通り設定する
3.の設定手順のうち、下記の項目のみ変更して、設定する。
[検索する文字列]
["()]+(?:\r\n|[\r\n])|["()]+
[置換後の文字列](空に設定する)
〔チェックボックス〕
[先頭/末尾から再検索(P)]:ON
上記以外のチェックボックスすべて:OFF
〔検索モード〕
[正規表現(G)]:ON
[.は改行と一致]:OFF7.2 [すべて置換]を実行する
7.3 結果の確認
期待通りの下記の結果になる。AAAAAAAAAAAAAAA BBBBBBBBBBBBBB CCCCCCCCCCCC DDDDDDDDDDD AAAAAAAAAAAAAAA BBBBBBBBBBBBBB AAAAAAAAAAAAAAA BBBBBBBBBBBBBB -------
2024年9月27日 10:12 am #31927Yutaka Emuraキーマスターいつもお世話になっております。江村です。
[正規表現で検索する追加行数] に大きな数を指定していただければ、問題はありません。
よろしくお願いいたします。
2024年9月27日 10:31 pm #31938yasuji参加者いつもお世話になっております。
yasujiです。承知しました。
これは不具合ではなくEmEditorの正常な動作なので、ユーザ様のほうで追加設定をして対応をお願いしますというご回答内容だと理解いたしました。2024年8月28日に年間サブスクリプション版の値上げを実施した状況で、このようなご対応でよいのでしょうか?
値上げ分の価値をご提供する何か新しいアイディアを当然持っておられると思いますが、それ以前に値上げ前のバージョンから存在している不具合またはユーザの使い勝手を改善して基礎になる品質を確保しなければならないと思います。
さらには、1年ごとに新価格で新テキストエディター(ユーザに継続更新をしていただくためには単品で売れるくらいの新機能がいるだろうと思いました)をユーザに購入していただけるだけの価値を提供していると確信されてて、その準備も進めていると思っています。その準備作業を一時的に止めて、不具合修正の作業をしても大きな影響はないように思いました。
もちろん、Emurasoft, Inc.としての江村様のお考えでですので、私としてはこれ以上追及するつもりはありません。さすがに、私も疲れてしまいましたので。2024年9月28日 2:47 am #31940Yutaka Emuraキーマスターいつもお世話になっております。江村です。
現在、[正規表現で検索する追加行数] の設定をなくすことを検討しており、実際に試しているところですが、まだ実現には至っておりません。実現までご不便をおかけして申し訳ありませんが、引き続き [正規表現で検索する追加行数] の設定を追加してご利用いただければと思います。現状では、巨大ファイルへの対応と正規表現を両立させるために、この設定が必要です。
よろしくお願いいたします。
2024年9月29日 11:24 pm #31958yasuji参加者お世話になっております。
yasujiです。現在、[正規表現で検索する追加行数] の設定をなくすことを検討しており、実際に試しているところですが、まだ実現には至っておりません。実現までご不便をおかけして申し訳ありませんが、引き続き [正規表現で検索する追加行数] の設定を追加してご利用いただければと思います。現状では、巨大ファイルへの対応と正規表現を両立させるために、この設定が必要です。
上記の説明からの推測ですが、Onigmoに巨大ファイルデータを引き渡して正規表現検索の実行で何らかの不具合があってうまくいかないということがあるのかもとも思いました。Onigmo自体は巨大ファイルの検索のテストをしているかはかなり疑わしいので、経験則からの推測でしかありませんので、外れていたらすみません。
もし、Onigmo自体の動作不良か不具合が実現への障害になっているとしたらば、そこに関しては下記ようなやり方でクリアできるのではと考えました。
Onigmo(鬼雲)は、Oniguruma(鬼車)から分かれて開発された経緯がありますので、Onigurumaを追加サポートされてはいかがでしょうか?メリットとしては、API関数等はほぼ同じで、引き渡すオプション定義などが違うだけのため、使い方はほぼOnigmoと同じで手間がかからないことかと思います。
ただし、OnigmoとOnigurumaのヘッダーの定義の名称がお互いほとんど同じ名称を使っているため、うまくすみ分けて実装する実装課題が出てしまいます。
前提条件として、Onigurumaが巨大ファイルの検索に耐えられることを事前検証する必要があります。
前提条件を満たしてかつ、実装課題を解決できる見込みがあれば追加サポートして、巨大ファイル検索機能を維持できるのではと考えた次第です。Onigmoもそのまま機能は捨てずに、使用可能な最大ファイルサイズまでに制限して使えるようにする。それを超えて使用する場合は、現在のように1行ずつOnigmoに引き渡す方式を回避策として残して使用できるようにする(もちろんその回避策の実施内容とそれによる副作用や制限の説明が必要)。
Onigmoを残して不具合が修正されたときに巨大ファイルを検索できるように変更すればよいと思いました。どうして「現在のように1行ずつOnigmoに引き渡す方式」と検索動作を認識していのかは、下記のニュース記事と不具合から確信しているため。
(1)INTERNET Watch – 「テキストの編集」にこだわりが凝縮!定番エディタ「EmEditor」はなぜ他のエディタと違うのか?(2020年2月3日)
「CPUの拡張命令やマルチスレッドを使って高速化!「80倍」も……C++の「テンプレート」も活用した高速化も」の段落で検索アルゴリズムの高速化のやり方を江村様が説明しています。(2)\A.+\Zを正規表現検索すると誤った検索を行う
\A
と\Z
は、それぞれ入力テキストの先頭と末尾を示す正規表現です。したがって、「.
(Dot)」が改行コードに一致するオプションを指定していないにもかかわらず、\A.+\Z
が行すべてに一致する事象が発生するのは、1行ごとに正規表現の検索関数に引き渡している以外に起きえないからです。 - 作成者投稿
- このトピックに返信するにはログインしてください。