PHP-替换URL';在文本中包含链接,但仅当它们';你还没有被标记

PHP-替换URL';在文本中包含链接,但仅当它们';你还没有被标记,php,regex,preg-replace,Php,Regex,Preg Replace,我正在寻找一种方法来修改我发现的这个函数,这样它就不会改变我已经拥有的标签 function make_links_clickable($text){ return preg_replace('!(((f|ht)tp(s)?://)[-a-zA-Zа-яА-Я()0-9@:%_+.~#?&;//=]+)!i', '<a href="$1">$1</a>', $text);} 由于我是一名初学者,对regexp不太熟悉,如果有一个简单的解决方案,不需要使代码变得比

我正在寻找一种方法来修改我发现的这个函数,这样它就不会改变我已经拥有的标签

function make_links_clickable($text){
return preg_replace('!(((f|ht)tp(s)?://)[-a-zA-Zа-яА-Я()0-9@:%_+.~#?&;//=]+)!i', '<a href="$1">$1</a>', $text);}
由于我是一名初学者,对regexp不太熟悉,如果有一个简单的解决方案,不需要使代码变得比现在复杂很多,我将不胜感激

^(?<!href=["'])(?P<link>https?:\/\/(?:(?P<subdomain>(?:.*?\.)*?)(?P<domain>[^.]*))(?P<tld>\.[^.\n]+|\.co\.[^\/]+)(?P<path>(?:\/.*?|)))$
其中:

<a href="https://stackoverflow.com">stackoverflow</a>
<a href="http://www.bbc.co.uk/news">bbc</a>

但不涉及这一点:

<a href="https://stackoverflow.com">stackoverflow</a>


如果您想对其他项目做更多的工作,您可以这样做,我会尽可能多地捕获这些内容,以便您能够根据自己的需要来制作这些内容。

我非常确定存在两个重复的问题,但我无法立即找到一个(注意:如果有人提供重复链接,我愿意关闭该问题)

答案很可能是改用解析器,但对于快速而肮脏的解决方案,您也可以使用
(*SKIP)(*FAIL)
,如:

<a[^>]+>.+?</a>(*SKIP)(*FAIL)|\b(?:ftp|https?)://\S+


这里的想法是匹配您不想要的内容,例如任何看起来像链接的内容:

<a[^>]+>.+?</a>

<a href="https://stackoverflow.com">stackoverflow</a>
<a href="http://www.bbc.co.uk/news">bbc</a>
<a href="https://stackoverflow.com">stackoverflow</a>
<a[^>]+>.+?</a>(*SKIP)(*FAIL)|\b(?:ftp|https?)://\S+
<a href="$0">$0</a>
<a[^>]+>.+?</a>