• ベストアンサー

タグ内を除く文字列置換

ある特定文字を、HTMLの任意のタグ「<xxx>」を除いた範囲で置換をしたい場合はどのような正規表現で表すことができるでしょうか? たとえば以下のようなHTMLコードがあり、 <a href="http://google.ne.jp"><img src="./google.png"> google </a> このgoogleというテキスト部分の文字をyahooに置換したい場合は、 <a href="http://google.ne.jp"><img src="./google.png"> yahoo </a> となってほしいです。上の例に限らず、どんなHTMLにも適用できるような汎用性のある方法はないでしょうか。 自分で考えてみたのですが、タグを一旦抜き取って、代わりの記号を置き、置換後に元に戻すと言う方法くらいしか思いつきません。

質問者が選んだベストアンサー

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.1

参考URLの「Perl正規表現雑技」というページに、「タグの外側だけ対象に置換する」という項目があり、その方法で実現することができます。 このサイトは詳細な解説もさることながら、関連ページの「Perlメモ」と合わせ実用的なTipsが充実しており、大変おすすめです。 大崎さんのページ  http://www.din.or.jp/~ohzaki/ Perl正規表現雑技  http://www.din.or.jp/~ohzaki/regex.htm Perlメモ  http://www.din.or.jp/~ohzaki/perl.htm

参考URL:
http://www.din.or.jp/~ohzaki/regex.htm#ReplaceOutside
ytse
質問者

お礼

ありがとうございます。 >Perl正規表現雑技 このサイトは大変参考になりました、紹介していただいた他のサイトも今後活用してみます。

その他の回答 (1)

回答No.2

HTMLに限定して、考えるのであれば.. s/(>[^<]*?)google(.*?<)/$1yahoo$2/g; で良いんじゃないかと思います。 先行のタグの終わり(>) と 次のタグの始まり(<)の間だけを対象に google -> yahoo 置換を行います。

ytse
質問者

お礼

わかりやすいご説明ありがとうございます。 そういう方法もあるんですね、勉強なりました。