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

时间:2016-11-17 14:00:57

标签: php preg-replace converter

此代码将任何网址转换为可点击链接:

$str = preg_replace('/(http[s]?:\/\/[^\s]*)/i', '<a href="$1">$1</a>', $str);

当url以[character?开头]时如何使其不转换?像这样:

[http://google.com

1 个答案:

答案 0 :(得分:5)

使用negative lookbehind

$str = preg_replace('/(?<!\[)(http[s]?:\/\/[^\s]*)/i', '<a href="$1">$1</a>', $str);
                      ^^^^^^^

然后,http...前面的[子字符串将不匹配。

您可以将模式增强为

preg_replace('/(?<!\[)https?:\/\/\S*/i', '<a href="$0">$0</a>', $str);

即:删除()(捕获组),并在替换模式中将$1的后向引脚替换为$0,并注意[^\s] 1}} = \S,但更短。此外,[s]? = s?