• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:[php][正規表現]タグ以外を削除したい)

[PHP正規表現]タグ以外のテキストを削除する方法

このQ&Aのポイント
  • PHP環境で、正規表現を使ってタグ以外のテキストを削除する方法を教えてください。
  • タグ以外のテキストを削除したい場合、preg_replaceなどの関数を使用して正規表現を記述します。
  • ただし、< >で囲まれたテキストを削除すると、aタグの間のテキストも削除されてしまいます。どのようにすれば、aタグの間のテキストを残しつつ、タグ以外のテキストを削除できるでしょうか?

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

マッチするところ以外を削除するなら、マッチしたものをつなげるのが 手早いかもしれません <?PHP $html=<<<eof test<img src="1.jpg">test<img src="2.jpg">test test<a href="3.htm">test</a>test test<a href="4.htm"><img src="5.jpg"></a>test test<a href="6.htm">test<img src="7.jpg">test</a>test<img src="8.jpg">test test<a href="9.htm"><img src="10.jpg"><img src="11.jpg">test<img src="12.jpg"></a>test test<iframe src="13.htm" ></iframe>test eof; print "<pre>\n"; print htmlspecialchars($html); print "<hr>\n"; //実作業 ここから $pattern='/<(a|iframe) .*?>.*?<\/\\1>|<img .*?>/mis'; preg_match_all($pattern,$html,$m); $html=implode("\n",$m[0]); //ここまで print htmlspecialchars($html); print "</pre>\n"; ?>

doomdoom
質問者

お礼

教えていただいた内容で試した所 まさに望んだ内容で表示されました。 ありがとうございました!

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

ちょっと面倒な命題ですが htmlタグやbodyタグで囲まれてたら、全部残っちゃうのでは? という素朴な疑問もあります。 もし1行ごとに評価してよいならこんなのでも $pattern='/.*?(<.*>).*$/m'; $replacement='$1'; $html=preg_replace($pattern,$replacement,$html);

doomdoom
質問者

補足

ありがとうございます。 確かにhtmlやbodyタグがあると全部残ってしまうのですが、今回はそのような事はございません。 上記の例が、一行(改行なし)になっている前提で、全文を対象に一度に削除出来る方法を教えて頂けますと嬉しいです。

関連するQ&A