regex 如何在此正则表达式中将捕获组转换为非捕获组?

jbose2ul  于 2022-12-19  发布在  其他
关注(0)|答案(2)|浏览(94)

我正在尝试使用正则表达式将文本中的所有网址替换为超链接。网址必须以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呢?

f4t66c6m

f4t66c6m1#

使用以下模式:
第一个月
1.使用?使“https”中的“s”保持可选
1.使用[a-z]+捕获“https”之后的第一组字母
1.确保至少有一个.""后跟一个或多个字母
1.剩余的辅助信息是可选的,可以出现零次或多次[.a-z]*
Demo

gtlvzcf8

gtlvzcf82#

你可以试试这个:

$pattern = "/https?:\/\/(\S)+(\.\w{1,4})+/i"
echo preg_replace($pattern, "<a href='$0' target='_blank'>$0</a>", $str);

在模式中:
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.

相关问题