置換とReplaceRegularの結果が異なる
No.06700
colder
さん 11/09/06 13:59
colderです。
題名の通りですが、置換とReplaceRegularの結果が異なることがあります。
再現しますでしょうか?
//以下、再現用のマクロです。
newfile;
loaddll "hmjre.dll";
insert "fr bo\n";
replaceallfast "r?\\>", "o", regular;
$s = dllfuncstr("ReplaceRegular","r?\\>", "fr bo",0,"o",1);
message $s;
endmacro;
//ここまで
環境 win7+秀丸v8.11β5+hmjre.dll v3.40
[
△
]
RE:06700 置換とReplaceRegularの結果が異
No.06702
秀まるお
さん 11/09/06 15:14
秀丸担当の方で確認した結果、たしかに結果が違うということで、僕の方に回
送されてきました。
実は、秀丸エディタもHmJreも、無限置換を防ぐ用の処理が入ってます。例え
ば「\>」を「a」に置換するとか、そういう置換は無限置換の可能性があります。
そういう無限置換を防ぐための処理ロジックが秀丸エディタとHmJreとで違っ
てるようです。秀丸エディタの方がアグレッシブに置換してくれるのに対して
HmJre.dllは、ちょっと危ないと思ったら置換しないような処理になってるよう
です。
その辺のロジックの詳細を比較するなどして、対応できるならHmJre.dllも秀
丸と同じロジックに修正してみます。
また後ほどお返事させていただきます。
[
△
]
RE:06702 置換とReplaceRegularの結果が異
No.06705
秀まるお
さん 11/09/06 17:42
ということでロジック修正しました。
次の秀丸エディタ/秀丸メールに添付するHmJre.dllのV3.41から対応させてい
ただきます。
秀丸の方では、ヒットした文字列の長さが0だったら1文字ずらしてから次の
検索をする、という風になっていました。
HmJre.dllの方では、直前に置換した文字列の最後の部分にヒットしてる場合
はスキップする、みたいなロジックになってしまってました。秀丸と同じ
ロジックに修正させていただきます。
[
△
]