検索結果の異常についてNo.38061
fzok4234 さん 20/03/15 20:11
 
お世話になっております。さて、正規表現での検索で前方/後方一致を入れ子にする
とうまくマッチしない現象が起きました。

まず、検索対象の文字列を、

ABCDEFGHIJKLMN

とします。そして、

CDEFGH

にマッチさせることを意図して、以下のパターンで検索を行いました。

1.  (C)(D)(\c*)(H)
2.  (C)(D(?=E))(\c*)(H)
3.  (C(?=D))(D)(\c*)(H)
4.  (C(?=D))(D(?=E))(\c*)(H)
5.  (C)(D)(\c*)((?<=G)H)
6.  (C)(D(?=E))(\c*)((?<=G)H)
7.  (C(?=D))(D)(\c*)((?<=G)H)
8.  (C(?=D))(D(?=E))(\c*)((?<=G)H)
9.  (C)(D)(\c*)((?<=G(?=H))H)
10. (C)(D(?=E))(\c*)((?<=G(?=H))H)
11. (C(?=D))(D)(\c*)((?<=G(?=H))H)
12. (C(?=D))(D(?=E))(\c*)((?<=G(?=H))H)

結果は、1〜11までは正常にマッチしましたが、12だけは

H

のみにマッチしてしまいました。右側の入れ子部分ではなく左側の当然マッチするは
ずのパターンの組み合わせで発生しています。


環境は、

秀丸エディタ : v8.91 Float x64
秀丸パブリッシャー : v5.02
OS : Windows 10 Pro x64 1809

です。



[ ]
RE:38061 検索結果の異常についてNo.38063
秀まるお2 さん 20/03/16 08:56
 
 お手数かけてすみません。テストしてみた感じだと、たしかにバグってる気がしま
す。

 詳しくトレースしてからまたお返事させていただきます。

[ ]
RE:38063 検索結果の異常についてNo.38066
秀まるお2 さん 20/03/16 11:03
 
 詳しくトレースして原因分かりました。次の秀丸エディタのβ版に添付する、HmJr
e.dllのVersion 5.07にて修正させていただきます。

 バグの再現条件ですが、前方一致/前方不一致の、

   (?<=....)
   (?<!....)

 が、正規表現パターンの括弧の中にある場合で、そのパターンよりも前方に後方一
致/後方不一致の

  (?=...)
  (?!...)

 があるとダメでした。実は正規表現パターンの先頭にある前方一致/不一致指定と
途中にある物は、内部的に別扱いになってまして、そのパターンが先頭にあるのか途
中にあるのか判定する処理がありました。その処理の中で括弧のネストをカウントす
る処理があるんですが、そこのカウントの時に、後方一致/不一致の認識にバグがあ
って、それでおかしくなってました。

 大変失礼しました。

[ ]