Dreamweaver 8 を使っています。


サイト内のファイルにある、リンクのaタグのなかで、内部リンクのものだけをすべて検索し、置換してターゲット属性を与えたいのですが、方法はありますでしょうか。

ちなみに、検索・置換機能を使って

・検索: 特定のタグ: a
・含んでいない: 特定のタグあるいはテキスト: http://

で検索をかけてみましたが、内部リンクも外部リンクも全て拾ってしまうのでダメでした。

他のソフトを使っても結構です。方法があればお教えください。

回答の条件
  • 1人10回まで
  • 登録:2007/07/29 18:23:58
  • 終了:2007/07/30 14:17:55

ベストアンサー

id:NYO No.4

NYO回答回数35ベストアンサー獲得回数82007/07/30 13:46:29

ポイント55pt

もっと簡単にできそうです

1.現状

<a href="inner.html">内部リンク</a>
<a href="http://hatena.jp">外部リンク</a>

2.hogeタグに置換

httpで始まる外部リンクのaタグを一時的にhogeタグに置換

置換前:a href="http

置換後:hoge href="http

(hogeだけでもたぶん大丈夫ですが、わかりやすくするためhttpまで入れてあります)

<a href="inner.html">内部リンク</a>
<hoge href="http://hatena.jp">外部リンク</a>

これで外部リンクがhogeに変わりました。


3.aタグにターゲット設定

上記と同様に特定のタグ(=内部リンクのaタグ)に属性を指定します。

特定のタグ:a

属性の指定:target="_hoge"

<a href="inner.html" target="_hoge">内部リンク</a>
<hoge href="http://hatena.jp">外部リンク</a>

4.hogeタグの再置換

不必要なhogeタグをaタグに戻します。

置換前:hoge

置換後:a

<a href="inner.html" target="_hoge">内部リンク</a>
<a href="http://hatena.jp">外部リンク</a>

これで完了です。

なお、意図しない部分でhogeという文字列が含まれているかもしれませんので、ユニークな文字列を適宜使用すれば問題ないと思います。

正規表現は非常に強力で、wizemperorさんの方法はGoodですが、

慣れていないと、意図した部分が選択できない、意図しない部分を選択してしまうことがありえます。

この『hoge置換法』なら置換がイメージしやすく、他にも融通が利きますので裏技的に覚えておくとよいかと思います。

(要は"置換"の使いようですね♪)

id:Bie

素晴らしいアイデアです!

これでなれなくて不安な正規表現を使わなくてもいけそうです。

ありがとうございました。

2007/07/30 14:15:50

その他の回答(3件)

id:NYO No.1

NYO回答回数35ベストアンサー獲得回数82007/07/29 19:15:46

正規表現を駆使する・・・というのは難易度高めかもしれませんので、別の方法を提案します。


一時的に別のタグに置換&分離してから再置換』法(長っ!)


外部リンクは全てhttp~、内部リンクは全て相対パスとし、

外部リンクに設定したいターゲットを"_hoge"とします。


1.現状

<a href="inner.html">内部リンク</a>
<a href="http://hatena.jp">外部リンク</a>

2.hoge置換

ソースコードの置換で、httpを含むaタグを一時的にaとhogeタグに分離します。

置換前:a href="http

置換後:a href=""><hoge href="http

<a href="inner.html">内部リンク</a>
<a href=""><hoge href="http://hatena.jp">外部リンク</a>

これで外部リンクだけがhogeタグに置換されました。


3.hogeタグにtarget設定

同じく置換によって、特定のタグ内で属性指定を行います。

つまりhogeタグ内でtarget="_hoge"を設定してしまうわけです。w

特定のタグ:hoge

属性を設定:target="_hoge"

<a href="inner.html">内部リンク</a>
<a href=""><hoge href="http://hatena.jp" target="_hoge">外部リンク</a>

これで指定したいtargetが設定できました。


4.hogeとaタグを置換して結合

そもそも必要ないhogeタグを削除し、aタグに結合してしまいます。

置換前:href=""><hoge href

置換後:href

<a href="inner.html">内部リンク</a>
<a href="http://hatena.jp" target="_hoge">外部リンク</a>

これで完了です。

すでにtargetを設定してある場合やaタグ内での記述方法によって微調整すれば、一括して置換可能です。

id:Bie

コメントもいただきましたが、これは外部リンクを変更する方法ですよね。知りたいのは内部リンクの方です。

でも、このテクニックを使えば、いったん全てのリンクにターゲット属性を与え、その後で外部リンクだけターゲット属性を削除すれば、内部リンクの属性だけが残るかもしれませんね。

ありがとうございました。

2007/07/30 11:23:25
id:wizemperor No.2

wizemperor回答回数379ベストアンサー獲得回数522007/07/29 19:49:33

ポイント35pt

DWの置換機能でできます。

「特定のタグ」はかえって面倒なのと、ちょっと試したところうまくいかない(?)ようなので、正規表現を使った方法を書きます。

(「ターゲット属性を与えたい」ということなので、taget属性はまだ付いてないものとして書きます。)

まず、検索を「ソースコード」にして、「正規表現を使用」にチェックを付けてください。

次に入力欄に次のように入力します。


検索:

<a(\s+?.+?)?\shref="((?:http:\/\/abc\.ne\.jp|\/?\.+?).*?)"(\s?.+?)?>

置換:

<a$1 href="$2" target="_blank"$3>


「hhttp:\/\/abc\.ne\.jp」はご自分のサイトに合わせて変更してください。

その場合、「/」は「\/」、「.」は「\.」としてください。(「\」はWindowsでは円マーク)


置換欄の$1~$3は


$1: href属性の前にある属性等

$2: href属性の値(URI)

$3: href属性の後ろにある属性等


に置き換わりますので、

置換欄に$1~$3を当てはめて、後は変換したいように入力してください。

id:Bie

ありがとうございました。

この方法でうまくいきそうです。

正規表現については、DWのヘルプを読んでも役に立ちそうもなかったのであきらめておりましたが、もっと勉強しようと思います。

2007/07/30 14:12:56
id:minkpa No.3

minkpa回答回数4178ベストアンサー獲得回数552007/07/30 05:08:00

id:Bie

開いてみましたが見当たらないようです・・・

2007/07/30 10:07:39
id:NYO No.4

NYO回答回数35ベストアンサー獲得回数82007/07/30 13:46:29ここでベストアンサー

ポイント55pt

もっと簡単にできそうです

1.現状

<a href="inner.html">内部リンク</a>
<a href="http://hatena.jp">外部リンク</a>

2.hogeタグに置換

httpで始まる外部リンクのaタグを一時的にhogeタグに置換

置換前:a href="http

置換後:hoge href="http

(hogeだけでもたぶん大丈夫ですが、わかりやすくするためhttpまで入れてあります)

<a href="inner.html">内部リンク</a>
<hoge href="http://hatena.jp">外部リンク</a>

これで外部リンクがhogeに変わりました。


3.aタグにターゲット設定

上記と同様に特定のタグ(=内部リンクのaタグ)に属性を指定します。

特定のタグ:a

属性の指定:target="_hoge"

<a href="inner.html" target="_hoge">内部リンク</a>
<hoge href="http://hatena.jp">外部リンク</a>

4.hogeタグの再置換

不必要なhogeタグをaタグに戻します。

置換前:hoge

置換後:a

<a href="inner.html" target="_hoge">内部リンク</a>
<a href="http://hatena.jp">外部リンク</a>

これで完了です。

なお、意図しない部分でhogeという文字列が含まれているかもしれませんので、ユニークな文字列を適宜使用すれば問題ないと思います。

正規表現は非常に強力で、wizemperorさんの方法はGoodですが、

慣れていないと、意図した部分が選択できない、意図しない部分を選択してしまうことがありえます。

この『hoge置換法』なら置換がイメージしやすく、他にも融通が利きますので裏技的に覚えておくとよいかと思います。

(要は"置換"の使いようですね♪)

id:Bie

素晴らしいアイデアです!

これでなれなくて不安な正規表現を使わなくてもいけそうです。

ありがとうございました。

2007/07/30 14:15:50
  • id:NYO
    ↑すみません・・・
    外部リンクと内部リンクを逆に扱っていました。
    『文字列を含む』を『含まない』にすれば可能かと。
  • id:wizemperor
    補足です。
    「http://~」形式の絶対URIによる内部リンク、「./~」「../~」等の相対パスによる内部リンク、「/~」等の絶対パスによる内部リンク、すべてに対応しています。

    回答のものは、開始タグの「>」の前に空白文字がある場合、おかしくなる可能性があるかもしれません(「<a href="~" >」など)。
    その場合、検索欄は以下のものを使ってください。


    <a(\s+?.+?)?\shref="((?:http:\/\/abc\.ne\.jp|\/?\.+?).*?)"(\s?.*?)?>
  • id:NYO
    いるかありがとうございます。

    ありえないとは思いますが、
    4で回答した最後の手順でhogeをaに戻すときに、
    本当にそのままhogeで置換するとターゲットも"_a"になってしまいます。
    くれぐれもご注意ください。笑


    わたしも正規表現マスターしたいです・・・。
  • id:Bie
    みなさんありがとうございました。
    おかげさまで無事目的を果たすことができました。

    昨夜、夢の中でwizemperor さんに怒られました。
    「こっちの方がスマートで正道の答えなのにポイントが少ないとはなんだ!」

    すみません。
    NYOさんの答えがこちらのレベルにピッタリだったので
    思わずいるかまであげてしまったのです。

    wizemperor さんのアドバイスが活かせるレベルまで精進したいと思います。

    ともあれ、みなさんありがとうございました。
  • id:wizemperor
    いえいえ、わかりやすい方法でやられるのが一番です。
    無事目的を果たせられたということでよかったです。
    正規表現は多少でも覚えると、色々な場面で応用がききますのでおすすめですよ。
    機会があれば使ってみてくださいね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません