Regex替换http和HTTPS链接

2022-03-22 00:00:00 regex php preg-replace

我有以下preg_replace()针对链接的函数:

$link = preg_replace(
    "#http://([S]+?)#Uis", '<a href="http://\1">(link)</a>', 
    $link
);

它可以很好地处理http链接,但显然不能处理https链接。我如何调整它,使其也能与https链接一起工作。


解决方案

只需在http后添加s?并匹配整个链接,然后使用$0反向引用从替换模式中引用它:

$link = preg_replace(
    "#https?://S+#i", '<a href="$0">(link)</a>', 
    $link
);

请参阅PHP demo

详细信息:

  • https?-httphttps
  • ://-文字字符序列
  • S+-一个或多个非空格符号
  • i-不区分大小写修饰符。

注意U修饰符很容易混淆(?会写成??,图案会变长),我建议删除它。

如果模式中没有.s修饰符就没有意义,所以它也是多余的,我建议也删除它。

相关文章