2010-12-06 10 views
0

私は、このコードをテキストの中のURLをアクティブなHTMLリンクに変換するPHPで作成しています。文字列URLをREGEXとのアクティブなリンクに変換する

Hey check this cool link http://www.example.com 

で、これはに変態例えば

:あなたはそれだけで正しい<追加見ることができるように

Hey check this cool link <a href="http://www.example.com">http://www.example.com</a>

> htmlタグ

は、コードされますこれは:

$active_links_text = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\">\\0</a>", $original_text); 

私の質問は、URLがYouTube URLの場合を除き、これを動作させる方法です。

だから私はこの結果をしたい:文字列

Wow have you checked http://www.youtube.com/watch?v=dQw4w9WgXcQ its even better than http://www.example.com !!! 

では私はあなたが<> htmlタグがexample.comのに加えて見ることができるように

Wow have you checked http://www.youtube.com/watch?v=dQw4w9WgXcQ its even better than <a href="http://www.example.com">http://www.example.com</a> 

に変換したいですURLではなく、YouTubeのURLにあります。

どうすればいいですか?

私は私の問題を十分に説明してくれることを願っています。最後の注:私はこのコードをPHPで使用しています。5.2.14

ありがとうございました!

+0

私は、[spec](http://www.ietf.org/rfc/rfc1738.txt)で説明されているように、httpプロパティのURLに一致するようにURLプロパティを構築する必要があると思います。特に、あなたの正規表現は '? 'にマッチしません。また、 '&'、 '#'があるかもしれません... – khachik

+0

脇役に、ereg_ *関数はphp 5.3で廃止されました。すでにpreg_ *を使用したいかもしれません。 –

答えて

0

[編集:うわー、私はあなたの質問を完全に間違っていた!以下はあなたを助けるためのより良い試みです。]

私はそれをjs hereに入れました。元の正規表現は/(http:\/\/(?!www.youtube)[^<>\s]+)\b/gです。私はPHPのコーダーではないので、ここに書いてあります。否定的な先読みは、litteral www.youtubeの一致を防ぎます(より複雑なパターンが必要な場合は先読みの内容を変更できます)。

私の知る限りではjs固有のものはありませんが、ereg regexの構文はわかりません。 preg関数でスラッシュをエスケープする必要はなく、単語境界\bと否定先読み(?!*pattern*)は同じです。 /gフラグは、グローバル置換のためのもので、最初の一致で停止しないので、私はあなたのツールボックスに一種のreplaceAll関数があると思います。

また、私はphpのグローバルフラグについてはわかりませんが、replaceAll関数の一種を呼び出すことができると思います。

0

有効なURIコンポーネントについていくつか誤りがありました。このスキームはALPHA *(ALPHA/DIGIT/"+"/"-"/".")で定義され、[[:alpha:]]+ではありません。

スキームの:の後の部分は、//で始まる必要はありません。これは、http:とその他のファイル指向スキームに特有です。しかし[[:alpha:]]+:あなたの正規表現の開始は、あなた自身をhttp:に制限しようとしていないことを示しています。その場合、印刷可能なすべてのASCII文字が有効です。私。!~、または[\x21-x7E]*を正規表現として使用します。

要約すると:[[:alpha:]][A-Za-z0-9+-.]*:[\x21-x7E]*