0

在处理用户输入以使用这段代码使超链接变得栩栩如生时,我正在使用带有 PHP 的 preg_replace 的正则表达式:

preg_replace(
   '!(((f|ht)tp://)[-a-zA-Zа-яА-Я()0-9@:%_+.~#?&;//=]+)!i',
   '<a class="external" href="$1">$1</a>',
   $text
);

但是,我需要做的是忽略包含在 中的所有链接{{ }},例如,此输入应由正则表达式处理:

http://www.example.com/

应忽略此输入:

{{http://www.example.com/}}

如何更改我的正则表达式模式以按预期工作?

4

1 回答 1

3

(?<!...)用否定的后向 ( ) 和否定的前瞻 ( )包围您的正则表达式(?!...)

'/(?<!\{\{)(((f|ht)tp:\/\/)[-a-zа-я()0-9@:%_+.~#?&;\/=]+)(?!\}\})/i'

或者,只需逐字浏览文本,并尝试使用 URL 解析库查看一个单词是否是有效的 URL(URL 中不能有空格);并仅在这种情况下更换。

于 2013-01-10T23:48:36.003 回答