特定の文字列を含まない行に、所定の文字No.06466
あべし さん 10/10/31 22:37
 
秀丸マクロの知識が全くない初心者です。

秀丸マクロで、「http://www.yahoo.co.jp/」という文字を含まない場合、「target=
"_blank"」という文字列を付加したいんですが、マクロでどう書けばいいんでしょう
か?

マクロ実行前
<a href="http://www.yahoo.co.jp/">ヤフー</a>
<a href="http://www.yahoo.co.jp/map.htm">ヤフー 地図</a>
<a href="http://www.microsoft.co.jp/" target="_blank">マイクロソフト</a>
<a href="http://www.google.co.jp/">グーグル</a>
<li><a href="http://www.goo.co.jp/">goo</a></li>

マクロ実行後(1行目と2行目は変化なし、3行目は既に「target="_blank"」が入
っているので変化無し。4行目と5行目は「 target="_blank"」という文字列が挿入さ
れる。)
<a href="http://www.yahoo.co.jp/"> ヤフー</a>
<a href="http://www.yahoo.co.jp/map.htm">ヤフー 地図</a>
<a href="http://www.microsoft.co.jp/" target="_blank">マイクロソフト</a>
<a href="http://www.google.co.jp/" target="_blank">グーグル</a>
<li><a href="http://www.goo.co.jp/" target="_blank">goo</a></li>

参考までに、他所で教えていただいた
逆の処理をするマクロを貼っておきます。

setcompatiblemode 15;
begingroupundo;
replaceall "<a href=\"http://www.yahoo.co.jp[^\"]*\"\\f((?! target=\"_blank\
").)*?>" , "\\0 target=\"_blank\">" , regular;
if( ! result ) beep;
endgroupundo 1;

[ ]
RE:06466 特定の文字列を含まない行に、所No.06467
IKKI さん 10/11/01 04:26
 
おはようございます。ユーザの IKKI です。

お尋ねの用途ならマクロを使うまでもなく、単に全置換するだけで済みそうです。

検索: <a href="(?!http://www.yahoo.co.jp/).*?"
置換: \0 target="_blank"
正規表現: ON

同じ操作をあえてマクロで書くと次のようになります。

replaceallfast "<a href=\"(?!http://www.yahoo.co.jp/).*?\"", "\\0 target=\"_
blank\"", regular, nocasesense;


# 古いバージョンの秀丸エディタではこの方法は使えないかもしれません。
# 質問の際はお使いの秀丸エディタのバージョンを明記されることをお勧めします。

[ ]
RE:06467 特定の文字列を含まない行に、所No.06468
アルビレオ さん 10/11/01 04:43
 
ユーザーのアルビレオです。

>お尋ねの用途ならマクロを使うまでもなく、単に全置換するだけで済みそうです。
>
>検索: <a href="(?!http://www.yahoo.co.jp/).*?"
>置換: \0 target="_blank"
>正規表現: ON

これだとすでに target="_blank" がある要素にも追加されてしまいますね。
一旦 target="_blank" を全削除してから追加するのが簡単だと思います。

replaceallfast "target=\"_blank\"", "", nocasesense;
replaceallfast "<a href=\"(?!http://www\.yahoo\.co\.jp/).*?\"", "\\0 target=
\"_blank\"", regular, nocasesense;

ただしこの場合、すでに <a href="http://www.yahoo.co.jp/..." target=
"_blank"> となっている箇所も削除されてしまいますが。

[ ]
RE:06468 特定の文字列を含まない行に、所No.06469
IKKI さん 10/11/01 05:04
 
アルビレオさん、おはようございます。

> これだとすでに target="_blank" がある要素にも追加されてしまいますね。
そうですね。ご指摘ありがとうございます。

> 一旦 target="_blank" を全削除してから追加するのが簡単だと思います。
それだと
<a href="http://www.lycos.co.jp" target="_blank">ライコス (まだあるの?)</a>
みたいなのが既にあったら、それも削除されてしまいますね。

ついでに言うと
<a href="http://ime.nu/http://www.yahoo.co.jp">ヤフーへ転送</a>
みたいなケースも私の回答だと取りこぼします。

いずれにせよ要求仕様が不明確なので、基本的なアイディアだけお伝えして、
あとは質問者さんの方で実情に合わせていただくしかないかなあと思いました。

[ ]
RE:06468 (解決)特定の文字列を含まないNo.06470
あべし さん 10/11/01 12:49
 
アルビレオさん、IKKIさん、こんにちは。

アルビレオさんが教えて頂いたマクロ

replaceallfast "target=\"_blank\"", "", nocasesense;
replaceallfast "<a href=\"(?!http://www\.yahoo\.co\.jp/).*?\"", "\\0 target=
\"_blank\"", regular, nocasesense;

で、無事解決しました。
IKKIさんもアドバイス有難うございます。
お蔭様で助かりました。

[ ]