- ベストアンサー
タグ内を除く文字列置換
ある特定文字を、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にも適用できるような汎用性のある方法はないでしょうか。 自分で考えてみたのですが、タグを一旦抜き取って、代わりの記号を置き、置換後に元に戻すと言う方法くらいしか思いつきません。
- みんなの回答 (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
その他の回答 (1)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
HTMLに限定して、考えるのであれば.. s/(>[^<]*?)google(.*?<)/$1yahoo$2/g; で良いんじゃないかと思います。 先行のタグの終わり(>) と 次のタグの始まり(<)の間だけを対象に google -> yahoo 置換を行います。
お礼
わかりやすいご説明ありがとうございます。 そういう方法もあるんですね、勉強なりました。
お礼
ありがとうございます。 >Perl正規表現雑技 このサイトは大変参考になりました、紹介していただいた他のサイトも今後活用してみます。