2011-05-19 103 views
1

我有这种代码正则表达式,它应该将所有类型的不同URL转换为一些文本中的链接。在php中找到所有的URL(链接)文本

preg_replace函数的代码是:

$regex = '@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@'; 
$text = preg_replace($regex, '<a href="$1">$1</a>', $item); 

现在它适用于几乎所有你能想象的网址,但我的问题是逗号,并在网址的特殊字符...

的问题是让我:

http://www.sdfsdfsdf.sd/si/391,1000,1/more.html

http://sdfsddsdf-sdfsdfds.sr/component/option,com_contact/Itemid,3/lang,si/

滑稽这里计算器这两个都OK了:)

感谢,最好的问候,

回答

6

你必须编辑你的正则表达式。这将做的工作:

$regex = '@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.\,]*(\?\S+)?)?)*)@'; 

正如你所看到的,这里有添加[-\w/_\.\,],仅此而已逗号。

享受!

+0

逗号的问题是,如果你有“http://www.avto.si/,http://www.avtooglasnik.com/,http://www.avtooglasi.com/”,这三个将会是与逗号相匹配,什么是错的当然:)任何想法? – Luka 2011-05-19 22:15:33

+0

@Luka:不,只有最后一个会与内部的逗号相匹配,其他人只会与不考虑逗号的域匹配。逗号必须在斜杠('/')之后才能匹配为基于上述 – 2011-05-19 22:23:04

+0

以上的正则表达式的URL的一部分,但是您永远不会有以逗号开头的网址,因此这应该是无效的,您可以如此做吗? thx回答无论如何,最好的:) – Luka 2011-05-19 23:21:41

2

尝试使用以下功能:

function replaceURLWithHTMLLinks(text) { 
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; 
    return text.replace(exp,"<a href='$1'>$1</a>"); 
} 

在这里找到它:How to replace plain URLs with links?

+0

这不符合所有可能的URL,因为您将其限制为四个模式(http,https,ftp和文件)。 – Hyperboreus 2011-05-19 22:11:34

+0

是的,这不匹配大量的网址,比如sdkfskd.cs或www.google.cz等等,......无论如何。 – Luka 2011-05-19 22:16:29

-1

您可以使用此lib https://github.com/mxkh/url-finder简单查找HTML页面或文本中的URL。 Iinstall与作曲家composer require mxkh/url-finder

另外,这个lib有一个支持从流行的视频服务搜索视频链接作为Youtube,Vimeo。

我希望这对某人有帮助。

相关问题