PHP 正则表达式 - 如果匹配包含单词(字符串),则否定匹配项


PHP Regex - negate a match if it contains a word (string)

我已经尝试了很多方法来做到这一点,唯一一种似乎部分做我想要的方法是使用正则表达式的字符串否定和如何在正则表达式中否定特定单词中描述的前瞻性否定? 但我无法让它与我当前的正则表达式一起使用。

假设我有这个字符串:

[url=http://www.example.com]this url BB tag should match[/url]
[url=http://www.example.com][spoiler]this url BB tag shouldn't match[/spoiler][/url]

编辑:更深入的字符串,不应返回匹配项进行调试:

[url=http://www.example.com]Lorem[spoiler]this url BB tag shouldn't match[/spoiler]Ipsum[/url]

和当前的正则表达式模式:

#'[url=(['w]+?://.*?)']([^?'n'r't].*?)'[/url']#is

编辑:我正在使用以下正则表达式(没有 # 和 #is)在正则表达式好友上调试它:

'[url=(['w]+?://.*?)']([^?'n'r't].*?)'[/url']

(这两个正则表达式应该对我的应用程序产生相同的效果,因为我可以轻松适应它,所以如果更有意义,请使用后者)

将匹配字符串中的两行。我希望它不会在[url=xxxx://yyyy][/url]之间有一个[spoiler]字符串时返回匹配项。

我认为这可以通过负面展望来完成,但我似乎找不到一种方法将其插入当前正则表达式而不会使其无法使用。

任何帮助,不胜感激。

这应该可以解决问题。

'#'[url=([^']]+)'](?!'[spoiler'])(.*?)'[/url']#'