- ベストアンサー
preg_replaceでHTMLのタグを置換する方法
- preg_replace関数を使用してHTMLのタグを別のタグに置換する方法を教えてください。
- 特定のパターンにマッチする<a>タグを置換するための正規表現パターンを教えてください。
- PHPのバージョン5.2.4を使用していますが、上記の処理を正しく行うための方法を教えてください。
- みんなの回答 (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の結果を見たらどうなってますか?
その他の回答 (3)
- sakusaker7
- ベストアンサー率62% (800/1280)
マッチの数はたぶん期待通りだったんですよね? であれば、$replace にセットする値の中の \\1 を \1 に変えてみてください。 > '|<a[^>]+>([^</a>]*)</a>|' たぶん文字クラスの仕様を誤解されてます。>#2
お礼
はい、マッチ数は期待どうりになりました。 いろいろ調べてsakusaker7の仰るところにたどりついたのですが、やってみると結果は変化なかったです。
補足
\1で解決していました。 失礼しました。
- ulmo
- ベストアンサー率43% (197/454)
$pattern = '|<a[^>]+>([^</a>]*)</a>|'; では?
お礼
回答ありがとうございます。 今のところマッチはするが置換されないという具合です。 $countに<a>タグの数分だけの数字が表示されますから。 \\1を\1にもしてみました。しかし、まだ置換は成功しません。 この関数を使うには何か材料(ライブラリとか)が必要なのでしょうか?
- sakusaker7
- ベストアンサー率62% (800/1280)
> $pattern = '|<a href="/w/index\.php\?title=.*?">(.*)</a>|'; とりあえず、キャプチャしているところを (.*) → (.*?) にしてみてはどうでしょう?
お礼
いつもお世話になっております。。早速の回答ありがとうございます。 (.*?)にしてみましたら、<a>タグの数分だけマッチしました!。 あとは置換するところがうまくいきませんでした。
お礼
なんと早い回答なのでしょう。 細かい説明をしていただきましてありがとうございました。