这将为您完成工作。请参阅下面的说明,了解它是如何工作的。
$string = 'some text www.example.com more text http://example.com more text https://www.example.com more text';
$string = preg_replace('#\b(?:http(s?)://)?((?:[a-z\d-]+\.)+[a-z]+)\b#', "<a href='http$1://$2'>http$1://$2</a>", $string);
echo $string; // some text <a href='http://www.example.com'>http://www.example.com</a> more text <a href='http://example.com'>http://example.com</a> more text <a href='https://www.example.com'>https://www.example.com</a> more text
\b
匹配单词边界
(?:http(s?)://)?
可选匹配字符串,如果它包含'http://'
或'https://'
,如果 https 抓取's'
所以我们可以建立正确的 URL
(?:[a-z\d-]+\.)+
匹配一个或多个出现的一系列字母/数字,后跟一个句点
[a-z]+
匹配一个或多个出现的一系列字母 TLD,注意 TLD 现在可以购买,因此不能再限制长度。见http://tinyurl.com/cle6jqb
's'
然后,我们通过将它们括在括号中来捕获最后两个部分以及反向引用。
然后我们构建 URL:
<a href='http$1://$2'>http$1://$2</a>
http$1://
如果 HTTPS 反向引用$1
将包含一个's'
$2
将包含域名。我们将 URL 所在的链接设为链接文本。