PHPの正規表現・置き換えについてお願いします


PHP4でHTMLファイル内のタグ、
具体的に<h2></h2>のタグと、囲まれた文章を削除する方法を教えてください。
下記例のような結果を求めています。
<h2></h2>は複数回登場します。

具体的なコードでご教授をよろしくお願いいたします。



■置換え前
<h1>hoge</h1>
<h2>hogehoge</h2>
<p>hogehogehoge</p>
<h2>hogehogehoge</h2>
<img src="hoge.src">




■ 置換え後(結果)
<h1>hoge</h1>
<p>hogehogehoge</p>
<img src="hoge.src">

回答の条件
  • 1人2回まで
  • 登録:2007/09/23 19:07:21
  • 終了:2007/09/23 20:20:34

回答(2件)

id:GEN111 No.1

GEN111回答回数472ベストアンサー獲得回数582007/09/23 19:35:15

ポイント35pt

こんな感じでしょうか。

$html = <<< ENDHTML
<h1>hoge</h1>
<h2>hogehoge</h2>
<p>hogehogehoge</p>
<h2>hogehogehoge</h2>
<img src="hoge.src">
ENDHTML
;

echo preg_replace('!<h2>.*?</h2>!i', '', $html) ;

例の場合だと改行が残って空行になるのでそれも削除するなら

preg_replace('!<h2>.*?</h2>\n*!i', '', $html) ;

とか。

id:urawareds

ありがとうございます。

思った通りに動作しました。

2007/09/23 20:19:59
id:tezcello No.2

tezcello回答回数460ベストアンサー獲得回数692007/09/23 19:44:06

ポイント35pt

例には挙がっていませんでしたが、日本語の場合もあるかと思います。

文字列はUTF-8であると仮定してます。

読み込んだhtmlがそれ以外だったら、mb_mb_convert_encoding() を使って変換してからやってみて下さい。

mb_internal_encoding'(UTF-8');
mb_language('ja');
mb_regex_encoding('UTF-8');

$str = <<<EOL
<h1>hoge</h1>
<h2>hogehoge</h2>
<p>hogehogehoge</p>
<h2>ほげほげ</h2>
<img src="hoge.src">

EOL;

$str = preg_replace('/<h2>.+<\/h2>/u', '', $str);
id:urawareds

ありがとうございます。

思った通りに動作しました。

2007/09/23 20:20:03

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません