我正在尝试使用正则表达式将文本中的所有网址替换为超链接。网址必须以http://
或https://
开头。并且它们必须包含一些TLD,例如.com
、.org
或.co.uk
等。
下面是我在PHP
中的regex
模式:$pattern = "/(http)+(s)?:\/\/(\S)+(\.){1}/i";
因此,如果使用以下代码:
$str = "this http://dd is a String http://www.example.com and this a String https://anotherexample.co.uk";
echo preg_replace($pattern, "<a href='$0' target='_blank'>$0</a>", $str);
它给出了以下输出:
你可以看到TLD部分没有包含在超链接中。那么我如何将捕获组(\.){1}
转换为非捕获组以覆盖TLD呢?
2条答案
按热度按时间f4t66c6m1#
使用以下模式:
第一个月
1.使用
?
使“https”中的“s”保持可选1.使用
[a-z]+
捕获“https”之后的第一组字母1.确保至少有一个.""后跟一个或多个字母
1.剩余的辅助信息是可选的,可以出现零次或多次
[.a-z]*
Demo
gtlvzcf82#
你可以试试这个:
在模式中:
https?
:http或https(\.\w{1,4})+
: TLDs like .co*.com* or something like .co.uk the maximum length of each TLD is 4 here but you can change that.