我在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中使用此代码
谢谢你们!
答案 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]*
。