置換と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の方では、直前に置換した文字列の最後の部分にヒットしてる場合
はスキップする、みたいなロジックになってしまってました。秀丸と同じ
ロジックに修正させていただきます。

[ ]