|
こんにちは。ユーザの IKKI です。
> ただここまで一般的なら、単語検索が有っても良い気がします。
> ##マクロを書く人なら、\<, \> を使うかもしれませんが。
賛同します。
ただ、もしやるとしたらの話ですが、秀丸の動作環境の
「単語の検索で "abc" を検索するとき "abc123" にはヒットさせない」
の影響を受けるのかどうか気になるところです。
それと、便乗して HmJre.dll に対する要望をひとつ…
Ruby の gsub() にあたる正規表現置換関数を追加していただけると大変ありがたい
です。
●利用イメージ
$self = "color = 0x123456;";
$search = " *= *0x([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2});";
$replace = "=\"#\3\2\1\"";
$result = ReplaceRegular($self, $search, $replace);
// "color=\"#563412\""
●マクロで同じことをするには
次のようにすればできますが、速度面でも手軽さの面でも不利だと感じています。
GSUBR: // HmJre.dll による正規表現置換(後方参照可)
// $$1 = 対象文字列
// $$2 = 検索パターン
// $$3 = 置換パターン
// ##4 = 1:大文字小文字を区別する
$$f = leftstr("FindRegularNoCaseSense", 11 + (##4 == 0) * 11);
$$s = $$1;
while (true) {
##p = dllfunc($$f, $$2, $$s, 0);
if (##p < 0) break;
$$t = "";
$$u = $$3;
while (true) {
##q = strstr($$u, "\\") + 1;
if (##q <= 0) break;
$$t = $$t + leftstr($$u, ##q - 1);
##e = ascii(midstr($$u, ##q, 8192));
if (##e >= '1' && ##e <= '9') $$t = $$t + midstr($$s, dllfunc("GetLast
MatchTagPosition", val(char(##e))), dllfunc("GetLastMatchTagLength", val(cha
r(##e))));
else if (##e == '\\') $$t = $$t + "\\";
else if (##e == 'n') $$t = $$t + "\n";
else if (##e == 't') $$t = $$t + "\t";
else $$t = $$t + char(##e);
$$u = midstr($$u, ##q + strlen(char(##e)), 8192);
}
$$r = $$r + leftstr($$s, ##p) + $$t + $$u;
$$s = midstr($$s, ##p + dllfunc("GetLastMatchLength"), 8192);
}
if (##p == -2) message "正規表現のエラーです\n" + $$2;
return $$r + $$s;
ということで、ご検討いただければ幸いです。
|
|