|
TAKATAKAさん、こんにちは。ユーザの IKKI です。
> 1.'<img'から始まり、最初の'>'が出るまでの間に、
> '半角スペース+border="0"'が含まれる一文のタグから、
> '半角スペース+border="0"'の部分を削除(置き換え)したい。
こちらは置換で可能ですね。
検索: (<img[^<>]*) border="0"([^<>]*>)
置換: \1\2
正規表現: ON
マクロなら
replacedown "(<img[^<>]*) border=\"0\"([^<>]*>)", "\\1\\2", regular;
です。
> 2.'<img'から始まり、最初の'>'が出るまでの間に、
> '半角スペース+width="200"'または'半角スペース+height="300"'が含まれる一文
> のタグを、
> '半角スペース+style="width:200px; height:300px"'に変換して、
> '半角スペース+width="200"'および'半角スペース+height="300"'の部分を削除し
> たい。
こちらは、width と height の出現順序が固定されていれば正規表現置換置換で
行けますが (考えてみてください)、順不同な場合は諦めた方がいいと思います。
# どうしても正規表現置換にこだわるなら、1回目の置換で出現順序を揃えておき、
# 2回目の置換で「style=」に変換する、という方法もあるかもしれませんが…。
まあ、悩んでる間にマクロを書いてしまいましょう。末尾に例を示します。
> 例2)<img border="0" height="300" src="test/images/image.gif" width="200">
> 例2)<img style="width:200px; height:300px" src="test/images/image.gif">
この例では「 border="0"」が消えていますが、下のマクロでは消していません。
setcompatiblemode 0x200;
loaddll "hmjre.dll";
searchdown2 "(?<=<img)[^<>]* (width|height)=\"\\d+\"[^<>]*>", regular;
if (result) {
$$tag = gettext(foundtopx, foundtopy, foundendx, foundendy, true);
$$width = "";
if (dllfunc("FindRegularNoCaseSense", ".* width=\"(\\d+)\".*", $$tag, 0) >=
0) {
$$width = "width:" + midstr($$tag, dllfunc("GetLastMatchTagPosition", 1), dl
lfunc("GetLastMatchTagLength", 1));
}
$$height = "";
if (dllfunc("FindRegularNoCaseSense", ".* height=\"(\\d+)\".*", $$tag, 0) >=
0) {
$$height = "height:" + midstr($$tag, dllfunc("GetLastMatchTagPosition", 1),
dllfunc("GetLastMatchTagLength", 1));
}
$$newtag = dllfuncstr("ReplaceRegularNoCaseSense", " (width|height)=\"\\d+\"
", $$tag, 0, "", 1);
insert " style=\"" + $$width + "px; " + $$height + "px\"" + $$newtag;
}
freedll;
|
|