将URLS转换为与REGEX的活动链接

时间:2010-12-06 14:53:35

标签: regex

我在php中使用此代码将文本中的URL转换为活动的html链接。

例如在字符串

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>

正如您所看到的,它只是添加了正确的&lt; a&gt; html标签

代码是这样的:

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

我的问题是,如果网址是youtube网址,如何工作除外。

所以我想要这个结果:在一个字符串中

Wow have you checked http://www.youtube.com/watch?v=dQw4w9WgXcQ its even better than http://www.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>

你可以看到&lt; a&gt; html标记已添加到example.com的URL中,但未添加到youtube的URL。

我怎样才能实现这一目标?

我希望我能够很好地描述我的问题,我希望它很容易实现!最后一点:我在php 5.2.14中使用此代码

谢谢你们!

2 个答案:

答案 0 :(得分:0)

[编辑:哇,我的问题完全错了!以下是帮助您的更好尝试。]

我在js here给了它一个,这是原始的正则表达式:/(http:\/\/(?!www.youtube)[^<>\s]+)\b/g,因为我不是一个php编码器。负向前瞻防止了一个简单的www.youtube匹配(如果你需要一个更复杂的模式,可以调整前瞻内容)。

据我所知,这里没有js特定的,但我不知道 ereg 正则表达式语法。使用preg函数,您只需要不要转义斜杠,单词边界\b和负向前导(?!*pattern*)是相同的。 /g标志用于全局替换,即不在第一个匹配项上停止,我想您的工具箱中有一种replaceAll函数。

另外,我不确定php中的全局标志,我猜你可以调用一种replaceAll函数。

答案 1 :(得分:0)

您对有效的URI组件犯了几个错误。该方案定义为ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ),而不是[[:alpha:]]+

该方案的:之后的部分不需要以//开头,这对于http:和其他一些面向文件的方案是特定的。但是你的正则表达式的[[:alpha:]]+:开头表明你并不打算将自己限制在http:。在这种情况下,所有可打印的ASCII字符都有效。即从!~[\x21-x7E]*作为正则表达式的所有内容。

总结:[[:alpha:]][A-Za-z0-9+-.]*:[\x21-x7E]*