У меня есть следующее выражение регулярного выражения, которое будет захватывать начало тега цитаты и автора в различных случаях.
Я не могу заставить его соответствовать link=
ИЛИ ЖЕ pid=
(обратите внимание на место перед каждым из них).
На данный момент, я думаю, что происходит, когда выражение соответствует отдельным буквам, а не строкам выше.
\[(quote)\]?\s*(?:author)?=?(.[^link=|pid=]+[\w]*).*?\]
Пример строки, на которой я тестирую регулярное выражение. Я пытаюсь запечатлеть две вещи: «цитата» (которая становится моими $ 1), а затем имя пользователя (в различных случаях, которое становится моими $ 2).
Подстановка [$ 1 = $ 2].
Я пытаюсь остановить выражение в закрывающей квадратной скобке, поэтому мне не нужно иметь дело с содержимым тега кавычки или заключительным тегом закрытия. Выражение имеет дело только с открывающим тегом и атрибутами кавычки.
Test
С приведенным выше выражением регулярного выражения оно будет соответствовать:
Test
Когда оно должно совпадать со всем вышеперечисленным, кроме «pid». Вот более полный пример: http://regex101.com/r/iK2nO2/1
Как я могу более четко определить, где должна остановиться группа захвата? Я использую это с PHP, поэтому я думаю, что вкус PCRE.
\[(quote)\]?\s*(?:author)?=?((?:(?!\s+link|\s+pid).)+).*?\]
Попробуйте это. См. Демо.
Других решений пока нет …