URL末尾の#以降や?以降を維持したまま一括更新する
リンク先URLには、ページ内リンクとして末尾に「#second」のような文字列が付加されていたり、アクセス解析の補助として「?from=home」のような文字列が付加されている場合もあります。それらの文字列を維持したまま、リンク先URLを修正したい場合も、正規表現で実現できます。例えば、同一ページへのリンクとして、
<a href="../../samples/abc.html#DEF">サンプル</a>
<a href="/samples/abc.html?from=home">さんぷる</a>などの記述が混在している状況で、それらをそれぞれ、移転先の
<a href="/yonples/abc123.html#DEF">ヨンプル</a>
<a href="/yonples/abc123.html?from=home">ヨンプル</a>に修正したい場合は、
◆検索語:
<a href=".*?/samples/abc\.html(.*?)">.+?</a>◆置換後:
<a href="/yonples/abc123.html\1">ヨンプル</a>と指定すれば、URL末尾に加えられた文字列を維持したまま、URLとリンク文字を一括して修正できます。
ここでは、「検索語」側に以下のような正規表現を使用しています。
- 「(.*?)」
先ほど説明した通り、「.*?」は「任意の文字が0回以上出現する(最短一致)」を示す表現です。その「.*?」を丸括弧で囲むことで、後方参照が可能になります。後方参照とは、ここで該当した文字列を、「置換後の文字列」として利用可能にする機能のことです。
- 「\1」
これは後方参照の記述です。「\1」と記述した箇所に、検索語側で丸括弧を付けた部分の文字列がそのまま挿入されます。
URL末尾の#以降や?以降を維持したまま一括更新する(2)
先ほどの置換条件では、URLの末尾に「?」記号や「#」記号以外の文字列が付いている場合でも置換対象になります。あまりないでしょうが、例えば以下のような記述があった場合、これも置換対象になってしまいます。<a href="/samples/abc.htmlfile.gif">画像</a>
URL末尾に「?」記号か「#」記号のどちらかが付いている場合だけに置換対象を限定したい場合は、検索語を以下のように記述します。
<a href=".*?/samples/abc\.html([?#].*?)">.+?</a>上記の「 [?#] 」は、「?記号か#記号のいずれか」を表します。その後「 .*? 」と続けていますので、全体では「?記号か#記号の後に任意の文字が0回以上出現する」という意味になります。
さて、リンクを作るa要素の開始タグには、href属性だけが指定されているとは限りません。別ウインドウで開くためにtarget属性が付加されていたり、装飾するためにclass属性が付加されていたりすることもあります。「属性値を維持したまま一括置換したい」場合や、「属性を削除した上で一括置換したい」場合もあるでしょう。
そこで最後に、属性を維持したままリンク先やリンク文字を一括更新する方法をご紹介致します。