• 締切済み

正規表現 URLのリンク

$value = 'http://www.google.co.jp http://www.google.co.jp'; $screen = substr($value, 0, 40); $strVal = preg_replace("/http.?:\/\/([0-9a-zA-Z\-\.!~\/?:;=+,%#_])+/","<a href=\"\\0\" target=\"_blank\">\\0</a>", $screen); echo $strVal; とした場合 <a href='http://www.google.co.jp'>http://www.google.co.jp</a> <a href='http://www.googl'>http://www.googl</a> となってしまうのですが、これを2つ目は切れているので、末尾でヒットした場合にはAタグは付けないようにしたいのですが、できますでしょうか?

みんなの回答

回答No.2

40文字で区切ってしまうと言う理由が良く解りません。 URLが必ず先頭から始まると解っている場合、以下のような物はいかがでしょうか。 $value = 'http://www.google.co.jp http://www.google.co.jp'; $strVal = preg_replace("/^http.?:\/\/([0-9a-zA-Z\-\.!~\/?&%:;=+,%#_])+/","<a href=\"\\0\" target=\"_blank\">\\0</a>", $value); echo $strVal; URLにはアンパサンドも良く使われると思うので、ついでに入れておいた方が良いと思います。 極稀に日本語ドメインの方がいるかも知れませんし、単純に[^"' ]などでも良いかも知れません。

unlax
質問者

補足

40文字はあくまで例なので、理由はありません。 ありがとうございます&もいりますね。 日本語ドメインは対応しないという事でお願いします。

  • glphon
  • ベストアンサー率26% (41/152)
回答No.1

一度分割してから部分的に置き換えてはいかがでしょうか。 $value = '​http://www.google.co.jp​ ​http://www.google.co.jp';​ $vs = split (' ', $value); $vs0 = preg_replace("/http.?:\/\/([0-9a-zA-Z\-\.!~\/?:;=+,%#_])+/","<a href=\"\\0\" target=\"_blank\">\\0</a>", $vs[0]); $vs[0] = $vs0; $strVal = implode ("\n", $vs); echo $strVal;

参考URL:
http://jp2.php.net/manual/ja/function.split.php
unlax
質問者

補足

すみません。解りにくくて(TT $value = '​http://www.google.co.jp​ ​http://www.google.co.jp';​ はあくまで例でして、$valueには毎回同じ文が入るわけではなく、URLが入っている場合のみリンクするようにしたいのです。 しかし、40文字あたりにリンクがきた時に問題があるなと思って今回質問させてもらいました。

関連するQ&A