正規表現のバグ?No.00593
Buckeye さん 07/03/22 08:52
 
いつもお世話になっています。

正規表現のコミュニティにあがった質問の回答を書いていたとき、ちょっと気に
なる現象があったので、ご報告します。秀丸エディタのバージョンはVer.6.50
β27、正規表現dllはHMJREのVer1.82です。

質問は、↓で、
------------------
500行で1行50文字の英字小文字があります
その中から右下方向にappleと並んでいるところを探す方法はありませんか?
右下方向は
abisc
bpsqr
bvpzl
dbdlf
qzpde
こういう感じで
------------------

これを↓の正規表現で検索しようとしたのです。
a(.|\n){51}p(.|\n){51}p(.|\n){51}l(.|\n){51}e

で、以下の文字列でテストをしてみると……
------------------
abisc01234a5678901234abisc5678a9012345678901234567
bpsqrabisc01234567589bpsqr012345678901234567890123
bvpzlbpsqrabisc012534bvpzl56789a012345678901234567
dbdlfbvpzlbpsqrab5iscdbdlf012345678901234567890123
qzpdedbdlfbvpzlbpsqrqz5pde012345678a90123456789012
01234qzpdedbdlfbvpzl567890123456789012345678901234
0123456789qzpdedbdlf012345678901234567890123456789
012345678901234qzpde567890123456789a01234567890123
01234567890123456789012345678901234567890123456789
01234567890123456789012345678901234567890123456789
------------------

最初のヒットは、文字列頭の"a"からでこれはOK。

ところが、2回目のヒットが、その次の"a"、つまり、"01234a56789"の"a"、2行
目の最初の"0"の"a"から5行目半ばの"e"までとなります。これ、a(.|\n){51}pが
狂った状態でヒットしています。

3回目のヒットは、そのまた次の"a"、つまり1行目半ばの"a"から2回目ヒットの
末尾までとなります。これもOK。

4回目以降のヒットも問題、ないようです。

Best regards,
Buckeye

[ ]
RE:00593 正規表現のバグ?No.00594
秀まるお さん 07/03/22 10:13
 
 調べてみたら、たしかにHmJre.dllがバグってました。

 HmJre.dllのV1.80だと現象が起きなくてV1.82だと起きるようですけど、バグ
としては以前から潜在的にあったバグで、それがなぜかV1.82で表に出てきたと
いうことのようですが…。

 {51}みたいな正確な回数指定についての処理が適当になってる処理が一部にあ
って、たまたまその処理(高速化の一環でやってる処理)が働いてしまうとヒッ
ト回数が狂ってしまって不正確な所にマッチしてしまってました。

 とにかく修正させていただきます。

[ ]
RE:00594 正規表現のバグ?No.00597
白雲斎 さん 07/03/22 12:16
 
こんにちは“秀まるお”さん、白雲斎です。
Windows XP, 秀丸エディタ 6.50β27

「hidesoft.2:22756| RE 22753 特定バイト目の文字置換について」
http://www.maruo.co.jp/hidesoft/2/x22753_.html?a=4#22756
の発言に目を通してもらえたでしょうか?

[ ]
RE:00597 正規表現のバグ?No.00598
秀丸担当 さん 07/03/22 12:32
 

>「hidesoft.2:22756| RE 22753 特定バイト目の文字置換について」
>http://www.maruo.co.jp/hidesoft/2/x22753_.html?a=4#22756
>の発言に目を通してもらえたでしょうか?

これは秀丸エディタ本体に関わることのようで、私がコメントしておきます。

[ ]