電子書籍の厳選無料作品が豊富!

[http://www.test.com/:title=てすとぺーじ]

<a href="http://www.test.com/">てすとぺーじ</a>
に変換したい場合、

http://phpspot.net/php/pg%90%B3%8BK%95%5C%8C%BB% …
に載ってる
// ereg_replace の場合
$str = "you are <b>cool!</b>";
$str2 = ereg_replace("<b>(.+?)</b>","\\1",$str);
を参考にして色々試してみたんですが、\\1に値が格納されなくて上手く置換できませんでした。
こういった記法からタグの変換などはereg_replace等をつかってできると思ってたんですが、上手く出来る方法はないでしょうか?

A 回答 (2件)

preg_replace("/\[http:(\/\/.*?):title=(.*?)\]/", "<a herf=http:\1>\2<\/a>", $string);


ではないでしょうか? 未検証
\1に「//www.test.com/」 ← 1個目のカッコ「(\/\/.*?)」に相当
\2に「てすとぺーじ」 ← 2個目のカッコ「(.*?)」に相当
が格納されると思います。

ただし、マルチバイト文字列なので、
mb_ereg_replace関数を使うべきかも?
    • good
    • 0
この回答へのお礼

返信送れてすいません。
回答くれた文のpreg_replaceで\1のところを
\\1にしたらできるようになりました。

・置換が成功した文
$item_naiyou = preg_replace("/\[link_url=http:(.*?):title=(.*?)\]/", "<a href=http:\\1>\\2</a>", $item_naiyou);

変数やpreg_replace内のパターンなどは例とは異なりますが
一応完成文です。
これでわざわざ何行にもわけて文を書かずに一行で置換ができるようになりましたので大変助かりました。回答の方ありがとうございました。

お礼日時:2007/01/06 20:11

ereg_replaceが受け付ける正規表現では +? のような最短マッチは使えないのでは?

この回答への補足

ereg_replaceが最短マッチを受け付けないと言われて、他に色々方法を探して試してたら一応それらしい文ができたので載せます。

$match_all = preg_match_all("%<b>(.+?)<\/b>%is", $str, $item);
for ($i=0; $i< $match_all; $i++){
$name_match = $item[1][$i];
}
$item_naiyou = ereg_replace("<b>$name_match<\/b>","$name_match",$str);

記法からタグの変換で、遠回りな文になってしまいましたが。ありがとうございました。

補足日時:2006/12/30 17:24
    • good
    • 0

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