首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用正则表达式匹配PHP中的URL模式

使用正则表达式匹配PHP中的URL模式
EN

Stack Overflow用户
提问于 2010-10-11 08:06:23
回答 8查看 45.2K关注 0票数 14

我想匹配一个URL链接在墙上的文章,并取代这个链接锚标签。为此,我使用下面的正则表达式。

我想要匹配四种类型的URL:

  1. http://example.com
  2. https://example.com
  3. www.example.com
  4. example.com
代码语言:javascript
复制
preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@',
             '<a href="$1">$1</a>', $subject);

此表达式仅匹配前两种类型的URL。

如果我使用这个表达式来匹配一个URL模式,'@(www?([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@',它只匹配第三种类型的URL模式。

如何用一个正则表达式来匹配URL patternS的所有四个patternS?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-10-11 08:12:19

老实说,我会用另一种方法。就像2009年的格鲁伯贴

代码语言:javascript
复制
\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))

或者2010年的Gruber发布的最新版本 (谢谢,@IMSoP):

代码语言:javascript
复制
(?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`!()\[\]{};:'".,<>?«»“”‘’]))
票数 18
EN

Stack Overflow用户

发布于 2012-07-25 01:34:26

使用‘给定的链接的完整工作示例

代码语言:javascript
复制
public function clickableUrls($html){
    return $result = preg_replace(
        '%\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))%s',
        '<a href="$1">$1</a>',
        $html
    );
}
票数 18
EN

Stack Overflow用户

发布于 2013-03-28 19:51:09

我环顾四周,没有看到任何我所需要的东西。我找到了接近的这一个,所以我对它进行了如下修改:

代码语言:javascript
复制
^((([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])?)$

".[],;:]+)*(.[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])?)$)">调试器上查一下。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3904482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档