我想匹配一个URL链接在墙上的文章,并取代这个链接锚标签。为此,我使用下面的正则表达式。
我想要匹配四种类型的URL:
http://example.comhttps://example.comwww.example.comexample.compreg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@',
'<a href="$1">$1</a>', $subject);此表达式仅匹配前两种类型的URL。
如果我使用这个表达式来匹配一个URL模式,'@(www?([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@',它只匹配第三种类型的URL模式。
如何用一个正则表达式来匹配URL patternS的所有四个patternS?
发布于 2010-10-11 08:12:19
老实说,我会用另一种方法。就像2009年的格鲁伯贴:
\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))或者2010年的Gruber发布的最新版本 (谢谢,@IMSoP):
(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))发布于 2012-07-25 01:34:26
使用‘给定的链接的完整工作示例
public function clickableUrls($html){
return $result = preg_replace(
'%\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))%s',
'<a href="$1">$1</a>',
$html
);
}发布于 2013-03-28 19:51:09
我环顾四周,没有看到任何我所需要的东西。我找到了接近的这一个,所以我对它进行了如下修改:
^((([hH][tT][tT][pP][sS]?)\:\/\/)?([\w\\-]+(\[\w\.\&%\$\-]+)*)?((([^\s\(\)\<\>\\\"\.\ [\]\,;:]+)(\.[^\s\(\)\<\>\\\"\.\[\]\,;:]+)*(\.[a-zA-Z]{2,4}))|((([01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}([01]?\d{1,2}|2[0-4]\d|25[0-5])))(\b\:(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}|0)\b)?((\/[^\/][\w\.\,\?\'\\\/\+&%\$#\=~_\-]*)*[^\.\,\?\"\'\(\)\[\]!;<>{}\s\x7F-\xFF])?)$https://stackoverflow.com/questions/3904482
复制相似问题