Php 排除链接以PREG_REPLACE中的字符开头

Php 排除链接以PREG_REPLACE中的字符开头,php,preg-replace,converter,Php,Preg Replace,Converter,此代码将任何url转换为可单击链接: $str = preg_replace('/(http[s]?:\/\/[^\s]*)/i', '<a href="$1">$1</a>', $str); 当url以[character]开头时,如何使其不转换?如下所示: [使用: 也就是说:删除和捕获组,并在替换模式中将$1中的反向引用替换为$0,注意[^\s]=\s,但更短。此外,[s]?=s?使用: 也就是说:删除和捕获组,并在替换模式中将$1中的反向引用替换为$0,注意[^

此代码将任何url转换为可单击链接:

$str = preg_replace('/(http[s]?:\/\/[^\s]*)/i', '<a href="$1">$1</a>', $str);
当url以[character]开头时,如何使其不转换?如下所示:

[

使用:

也就是说:删除和捕获组,并在替换模式中将$1中的反向引用替换为$0,注意[^\s]=\s,但更短。此外,[s]?=s?

使用:


也就是说:删除和捕获组,并在替换模式中将$1中的反向引用替换为$0,注意[^\s]=\s,但更短。此外,[s]?=s?

使前面的字符可选,不需要围绕s的字符类。[s]?与s?相同。使前面的字符成为可选字符,不需要围绕s的字符类。[s]?与s?相同。但这次,如果url末尾有一个字符,代码也会抓取它…如下所示:test.com将\s替换为[^\s]最后一个问题:当我们只编写http://时,我们的代码会将其转换为链接。我知道我问了很多抱歉,但是preg replace是PHP中最难/最复杂的主题,我想…再次使用[^\s]+,而不是[^\s]*.me。如果我们想排除链接,请从[和~我们能做什么?我的意思是双重排除模式。但是这次,如果url末尾有一个,代码也会抓取它…就像这样:test.comReplace\S与[^\S]最后一个问题:当我们只编写http://时,我们的代码会将其转换为链接。我知道我问了很多对不起,但是preg replace是PHP中最难/最复杂的主题,我想…再次使用[^\s]+,而不是[^\s]*。我想。如果我们想排除链接,从[and~开始,我们能做什么?我的意思是双重排除模式。
$str = preg_replace('/(?<!\[)(http[s]?:\/\/[^\s]*)/i', '<a href="$1">$1</a>', $str);
                      ^^^^^^^
preg_replace('/(?<!\[)https?:\/\/\S*/i', '<a href="$0">$0</a>', $str);