プロが教える店舗&オフィスのセキュリティ対策術

HTMLのタグを別のタグに置換しようとしています。

HTML中に複数ある<a></a>タグ

<a href="/w/index.php?title=%E3%83%95%E3%82%B0%E3%83%AA%E3%83%BC%E5%B7%9D&amp;action=edit" class="new" title="フグリー川">フグリー川</a>など

という文字列の<a></a>タグを<span style="color:#ff0000;"></span>に置換したいのです。

$pattern = '|<a href="/w/index\.php\?title=.*?">(.*)</a>|';
$replace = '<span style="color:#ff0000 ;">\\1</span>';
preg_replace( $pattern, $replace, $html, -1, $count);

print $count;
$countの表示は 1 でした。上記のような<a>タグは複数あるのに。

上記のような<a>タグをマッチさせるにはどうパターン表記したらいいでしょうか?
PHP5.2.4です。
ご教授お願いします。

A 回答 (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の結果を見たらどうなってますか?
    • good
    • 0
この回答へのお礼

なんと早い回答なのでしょう。

細かい説明をしていただきましてありがとうございました。

お礼日時:2007/11/12 10:44

マッチの数はたぶん期待通りだったんですよね?


であれば、$replace にセットする値の中の \\1 を \1 に変えてみてください。


> '|<a[^>]+>([^</a>]*)</a>|'

たぶん文字クラスの仕様を誤解されてます。>#2

この回答への補足

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

失礼しました。

補足日時:2007/11/12 10:39
    • good
    • 0
この回答へのお礼

はい、マッチ数は期待どうりになりました。

いろいろ調べてsakusaker7の仰るところにたどりついたのですが、やってみると結果は変化なかったです。

お礼日時:2007/11/12 09:16

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


では?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

今のところマッチはするが置換されないという具合です。

$countに<a>タグの数分だけの数字が表示されますから。

\\1を\1にもしてみました。しかし、まだ置換は成功しません。

この関数を使うには何か材料(ライブラリとか)が必要なのでしょうか?

お礼日時:2007/11/12 09:22

> $pattern = '|<a href="/w/index\.php\?title=.*?">(.*)</a>|';



とりあえず、キャプチャしているところを
(.*) → (.*?) にしてみてはどうでしょう?
    • good
    • 0
この回答へのお礼

いつもお世話になっております。。早速の回答ありがとうございます。

(.*?)にしてみましたら、<a>タグの数分だけマッチしました!。

あとは置換するところがうまくいきませんでした。

お礼日時:2007/11/09 13:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!