Я пробовал много способов сделать это, единственный, который, кажется, частично делает то, что я хочу, - это отрицание опережающего просмотра, описанное в Отрицание строки с использованием регулярных выражений и Как отрицать конкретное слово в регулярном выражении? но я не могу заставить его работать с моим текущим регулярным выражением.
Предполагая, что у меня есть эта строка:
[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) для его отладки в Regex Buddy:
\[url=([\w]+?://.*?)\]([^?\n\r\t].*?)\[/url\]
(эти два регулярных выражения должны иметь такой же эффект на мое приложение, поскольку я могу легко адаптировать его, поэтому работайте с последним, если это имеет больше смысла)
Соответствует обеим строкам в строке. Я хочу, чтобы он не возвращал совпадение, когда между [url=xxxx://yyyy]
и [/url]
есть строка [spoiler]
.
Я думаю, что это можно сделать с помощью отрицательного просмотра вперед, но я не могу найти способ вставить его в текущее регулярное выражение, не сделав его непригодным для использования.
Любая помощь приветствуется.