タグ: 正規表現不具合
- 作成者投稿
- 2024年8月31日 2:44 pm #31895yasuji参加者
江村様
いつもお世話になっております。
yasujiです。\Rとその等価表現である
(?>\x0D\x0A?|[\x0A-\x0C\x85\x{2028}\x{2029}])
および(?>\x{0D}\x{0A}?|[\x{0A}-\x{0C}\x{85}\x{2028}\x{2029}])
の正規表現文字列で正規表現検索を行うと行末の改行に一致することができず機能しない不具合です。ただし、すべてのパターンは試していませんが、Unicode改行コードの0x85, 0x2028, 0x2029には一致するようです。
※等価表現の一つ目はBoost.Regexのみ使用でき、2つ目はBoost.RegexとOnigmoで使用できます。(正規表現エンジンごとに対応している正規表現の差です)上記不具合の発生の再現手順は下記の通りです。
〔対象〕
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
〔チェックボックス〕
[一致する文字列を数える(U)]:ON
上記以外のチェックボックスすべて:OFF
〔ラジオボタン〕
[正規表現(X)]:ON[高度]
〔チェックボックス〕
[CRとLFを区別する(T)]:ON
[次を検索/前を検索で重ならない文字列のみ一致する(F)]:ON
上記以外のチェックボックスすべて:OFF
[正規表現エンジン(G)]:既定(Boost.Regex)
[正規表現で検索する追加行数(L)]:04.[次を検索]を実行する
5.結果の確認
文字列選択はできず、ステータスバーに「0個の一致(0行)が見つかりました。」と表示される。
\Rは、Unicode改行を含むあらゆる改行に一致する特別なエスケープ文字です。
したがって、すべての行末に一致して、「15個の一致」と表示されるのが正しいです。
[正規表現エンジン(G)]をOnigmoに設定しても結果は変わりません。
改行一致できないバグです。Matching Line Endings – Perl Regular Expression Syntax (Boost 1.84.0 Library Documentation)
Matching Line Endings
The escape sequence \R matches any line ending character sequence, specifically it is identical to the expression (?>\x0D\x0A?|[\x0A-\x0C\x85\x{2028}\x{2029}]).
6.検索を開いて、下記の通り設定する
[検索する文字列]
\R
〔チェックボックス〕
[一致する文字列を数える(U)]:ON
上記以外のチェックボックスすべて:OFF
〔ラジオボタン〕
[正規表現(X)]:ON[高度]
〔チェックボックス〕
[CRとLFを区別する(T)]:ON
[次を検索/前を検索で重ならない文字列のみ一致する(F)]:ON
上記以外のチェックボックスすべて:OFF
[正規表現エンジン(G)]:既定(Boost.Regex)
[正規表現で検索する追加行数(L)]:20007.[次を検索]を実行する
8.結果の確認
一回目のボタン押下では、エラーになり、ステータスバーに「0個の一致(0行)が見つかりました。」と表示される。
しかし、2回以上ボタンを連続して押下すると、行末の改行が選択される動作になり、ステータスバーに表示された結果と異なる動作バグです。正しい動作は、5.と同じです。
9.検索を開いて、下記の通り設定する
[検索する文字列](Boost.Regexの場合)
(?>\x0D\x0A?|[\x0A-\x0C\x85\x{2028}\x{2029}])
[検索する文字列](Onigmoの場合/Boost.Regexも可)
(?>\x{0D}\x{0A}?|[\x{0A}-\x{0C}\x{85}\x{2028}\x{2029}])
〔チェックボックス〕
[一致する文字列を数える(U)]:ON
上記以外のチェックボックスすべて:OFF
〔ラジオボタン〕
[正規表現(X)]:ON[高度]
〔チェックボックス〕
[CRとLFを区別する(T)]:ON
[次を検索/前を検索で重ならない文字列のみ一致する(F)]:ON
上記以外のチェックボックスすべて:OFF
[正規表現エンジン(G)]:既定(Boost.Regex)
[正規表現で検索する追加行数(L)]:010.[次を検索]を実行する
11.結果の確認
文字列選択はできず、ステータスバーに「0個の一致(0行)が見つかりました。」と表示される。
9.の2つの正規表現文字列は、\R
の等価の正規表現です。正しい動作は、5.と同じです。
[正規表現で検索する追加行数(L)]を2000に設定して9.から10.を実行した場合は、結果の確認は8.と同じになる。
12.検証
12.1 Notepad++を開いて2.を入力する12.2 検索を開いて、下記の通り設定する
[検索する文字列]
\R
〔チェックボックス〕
[先頭/末尾から再検索(P)]:ON
上記以外のチェックボックスすべて:OFF
〔検索モード〕
[正規表現(G)]:ON
[.は改行と一致]:OFF12.3 [次を検索]を実行する
12.4 結果の確認
1行目の改行が文字列選択される。
[数える(T)]を実行すると、「数える:15件の一致」と表示される。正しい動作と、結果表示がされる。
9.の[検索する文字列]を設定して、12.1から12.3を実行した場合も、上記と同じ結果になる。
2024年9月27日 10:16 am #31930Yutaka Emuraキーマスターいつもお世話になっております。江村です。
EmEditor v24.3.903 にて対応いたしました。
https://jp.emeditor.com/forums/topic/emeditor-v24-4-preview-24-3-901/
よろしくお願いいたします。
2024年9月27日 9:48 pm #31937yasuji参加者いつもお世話になっております。
yasujiです。EmEditor v24.3.903において、不具合の修正結果を確認しましたが、下記の通り修正されたものと、未修正のものがあります。
5.結果の確認
==> 不具合がまだ残っています。手順通りに再現できます。8.結果の確認
==> 修正されて不具合が解消されたことが確認できました。11.結果の確認
==> 不具合がまだ残っています。手順通りに再現できます。再度、ご確認とご対応をお願いします。
2024年9月28日 12:11 pm #31942Yutaka Emuraキーマスターいつもお世話になっております。江村です。
v24.3.904 にて修正いたしました。
よろしくお願いいたします。
2024年9月28日 3:29 pm #31946yasuji参加者いつもお世話になっております。
yasujiです。EmEditor v24.3.904において、不具合の修正結果を確認しましたが、下記の通り修正されたものと、未修正のものがあります。
5.結果の確認
==> 修正されて不具合が解消されたことが確認できました。8.結果の確認(v24.3.903で不具合解消済、再確認問題なし)
==> 修正されて不具合が解消されたことが確認できました。11.結果の確認
==> 一部不具合がまだ残っています。手順通りに再現できます。
9.の[検索する文字列]の2つのうち、一つにまだ不具合が残っています。
[検索する文字列](Boost.Regexの場合)を使用した場合
==> 修正されて不具合が解消されたことが確認できました。
[検索する文字列](Onigmoの場合/Boost.Regexも可)を使用した場合
==> 不具合がまだ残っています。手順通りに再現できます。再度、ご確認とご対応をお願いします。
2024年9月29日 10:14 am #31951Yutaka Emuraキーマスターいつもお世話になっております。江村です。
v24.3.905 にて修正いたしました。
よろしくお願いいたします。
2024年9月29日 6:14 pm #31955yasuji参加者いつもお世話になっております。
yasujiです。EmEditor v24.3.905において、不具合がすべてのケースで下記の通り修正されたことを確認しました。
なお、正規表現エンジンのリストに「Onigmo.Perl」が追加されたため、従来の「Onigmo.Ruby」(元Onigmo)と合わせて念のため追加確認いたしました。5.結果の確認(v24.3.904で不具合解消済、再確認問題なし)
==> 修正されて不具合が解消されたことが確認できました。
追加確認:
「Onigmo.Perl」==> 不具合なし
「Onigmo.Ruby」==>不具合なし8.結果の確認(v24.3.903で不具合解消済、再確認問題なし)
==> 修正されて不具合が解消されたことが確認できました。
追加確認:
「Onigmo.Perl」==> 不具合なし
「Onigmo.Ruby」==>不具合なし11.結果の確認
==> 一部不具合がまだ残っています。手順通りに再現できます。
9.の[検索する文字列]の2つのうち、一つにまだ不具合が残っています。
[検索する文字列](Boost.Regexの場合)を使用した場合(v24.3.904で不具合解消済、再確認問題なし)
==> 修正されて不具合が解消されたことが確認できました。
[検索する文字列](Onigmoの場合/Boost.Regexも可)を使用した場合
==> 修正されて不具合が解消されたことが確認できました。
「Onigmo.Perl」==> 不具合なし
「Onigmo.Ruby」==>不具合なし全てのケースでの不具合がすべて解消され問題なく動作することを確認しました。
迅速なご対応ありがとうございました。
- 作成者投稿
- このトピックに返信するにはログインしてください。