プロが教える店舗&オフィスのセキュリティ対策術

ある特定文字を、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にも適用できるような汎用性のある方法はないでしょうか。

自分で考えてみたのですが、タグを一旦抜き取って、代わりの記号を置き、置換後に元に戻すと言う方法くらいしか思いつきません。

A 回答 (2件)

参考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#ReplaceOu …
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/02/25 15:33

HTMLに限定して、考えるのであれば..



s/(>[^<]*?)google(.*?<)/$1yahoo$2/g;

で良いんじゃないかと思います。

先行のタグの終わり(>) と 次のタグの始まり(<)の間だけを対象に
google -> yahoo 置換を行います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/02/25 15:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!