• ベストアンサー

正規表現でタグの中を除く文字をマッチングするには

正規表現でタグの中を除く文字をマッチングするしたいのですが 良い方法はありますでしょうか。 例えば <a>のタグの中にない、"あい"を"かき"に変換したい。 <a>あいうえお</a>あいうえお ↓ <a>あいうえお</a>かきうえお という様にしたいのです。 正規表現では向かない処理かも知れませんが、 良い書き方ありましたら教えてください。

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

  • ベストアンサー
  • HarukaV49
  • ベストアンサー率53% (48/89)
回答No.3

どこまで、フォローが必要なのかわかりませんが、 最も単純には、 "<a>あいうえお</a>あいうえお".replaceAll("(^(?!<a>)|(?<=</a>))((?!<a>)あい)", "かき") で、可能かと思います。 解説は、以下をご参照ください。ここの方法を、そのまま流用しています。 ここには、数多くのパターンが載っていて、勉強になると思います。 http://oraclesqlpuzzle.hp.infoseek.co.jp/regex/regex-3-12.html

take_july
質問者

お礼

有難うございました。 解決出来そうですので、後は自分で色々調査してみます。 助かりました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

これも必要か。 <p><![CDATA[あ]]><![CDATA[い]]><!--あ--><!--い--><em>あ</em><em>い</em></p>

take_july
質問者

補足

上記のパターンはXMLパーサーを使いノードは纏めてから処理を行う事ができるので、考えなくても大丈夫です。 ヒットする文字が分かれてしまう場合はヒットしないで大丈夫です。 現在正規表現で処理している所がある為、出来れば正規表現で解決したいのです。 現在いくつかのパターンの置換処理を行っていますが、置換処理の設定(正規表現、置換後の文字列等)をconfファイルに持っています。 上記は今現在の処理ですが、上記の正規表現を<del>タグ以外の所で、行いたいという要望がありました。 実際には"あい"の所がconfに設定されている正規表現になるのですが、 confの設定の変更で解決できるのか、または全体的に作り直さなければいけないのか判らず質問させて頂きました。 なんでも良いので、アドバイス宜しくお願いします。

すると、全ての回答が全文表示されます。
回答No.1

>正規表現では向かない処理かも知れませんが、 YES。正規表現がどうしても必要という場合俺は力になれない。 書く前にひとつ質問なんだけど, <p title="あいうえお"><a title="あいうえお">あいうえお</a>あいうえおかか&#x3042;&#x3044;いうえお<!-- あいうえお --><![CDATA[あいうえお]]><em>あいうえお</em>あ<em>いうえお</em>あ<a>いうえお</a></p> という入力があった時,どんな答えが返ってきてほしいですか?

take_july
質問者

お礼

aというタグ以外のタグは無いという想定で大丈夫です。

take_july
質問者

補足

<a>タグに属性は付いていない想定で大丈夫です。 宜しくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A