• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:preg_replaceでタグだけ置換)

preg_replaceでHTMLのタグを置換する方法

このQ&Aのポイント
  • preg_replace関数を使用してHTMLのタグを別のタグに置換する方法を教えてください。
  • 特定のパターンにマッチする<a>タグを置換するための正規表現パターンを教えてください。
  • PHPのバージョン5.2.4を使用していますが、上記の処理を正しく行うための方法を教えてください。

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

> やってみると結果は変化なかったです。 改めて質問文にあるスクリプトを見て気になったのですが、 PHP: preg_replace - Manual http://www.php.net/preg_replace > preg_replace( $pattern, $replace, $html, -1, $count); replace の結果は関数の戻り値として得られるので、 このような呼び出しをして $htmlを参照しても 置換は反映されていません。 $result = preg_replace( $pattern, $replace, $html, -1, $count); とかして、$resultの結果を見たらどうなってますか?

brosis
質問者

お礼

なんと早い回答なのでしょう。 細かい説明をしていただきましてありがとうございました。

その他の回答 (3)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

マッチの数はたぶん期待通りだったんですよね? であれば、$replace にセットする値の中の \\1 を \1 に変えてみてください。 > '|<a[^>]+>([^</a>]*)</a>|' たぶん文字クラスの仕様を誤解されてます。>#2

brosis
質問者

お礼

はい、マッチ数は期待どうりになりました。 いろいろ調べてsakusaker7の仰るところにたどりついたのですが、やってみると結果は変化なかったです。

brosis
質問者

補足

\1で解決していました。 失礼しました。

  • ulmo
  • ベストアンサー率43% (197/454)
回答No.2

$pattern = '|<a[^>]+>([^</a>]*)</a>|'; では?

brosis
質問者

お礼

回答ありがとうございます。 今のところマッチはするが置換されないという具合です。 $countに<a>タグの数分だけの数字が表示されますから。 \\1を\1にもしてみました。しかし、まだ置換は成功しません。 この関数を使うには何か材料(ライブラリとか)が必要なのでしょうか?

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

> $pattern = '|<a href="/w/index\.php\?title=.*?">(.*)</a>|'; とりあえず、キャプチャしているところを (.*) → (.*?) にしてみてはどうでしょう?

brosis
質問者

お礼

いつもお世話になっております。。早速の回答ありがとうございます。 (.*?)にしてみましたら、<a>タグの数分だけマッチしました!。 あとは置換するところがうまくいきませんでした。

関連するQ&A