こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

正規表現について

すみませんが、教えてください。
PHP+MYSQLで掲示板のようなサイトを作っています。

投稿したコメントの中にURLがある場合、次の変換で、リンクを設定するようにしています。
$str = ereg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)", "<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>", $aStr);


さらに、次のことがしたいのですが、どうすれば良いのか教えてください。
(1)URLが長い場合、表示する文字列を指定文字数でカットする。
(2)URLのみをリンク設定付で切り出す。

当方、正規表現がほとんど理解できていません。
(オイラリーの本を買ったのですが、時間がなくて学習できていません。)
申し訳ございませんが、こうすれば良いというコードを教えていただければ、幸いです。

投稿日時 - 2006-10-03 07:09:32

QNo.2447632

暇なときに回答ください

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

たぶんpreg_系のコマンドを使わないと難しいと思います。

(1)preg_replace_callbackでやれば正規表現部分をほとんど変えないで
出来ます。
function replacer($matches){
$size=30; // カットする文字数
$a=$matches[0];
$b=$matches[0];
if(strlen($b)>$size){
$b=substr($b, 0, $size)."...";
}
return "<a href=\"{$a}\">{$b}</a>";
}
$str = preg_replace_callback("@(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:\@&=_-]+)@", "replacer", $aStr);
print $str;

(2)微妙に要望と違いますが、$strからリンク部分だけを抜き出すだけなら…
preg_match_all("@<a href.+</a>@", $str, $matches);
print_r($matches);

参考URL:http://jp.php.net/manual/ja/function.preg-replace-callback.php,http://jp.php.net/manual/ja/function.preg-match-all.php

投稿日時 - 2006-10-03 20:24:26

お礼

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

完璧です!!
希望通りです!!
感謝感激です。
ありがとうございました。

(お礼が遅くなり申し訳ございませんでした。)

投稿日時 - 2006-10-10 18:07:19

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問