Я использую следующее регулярное выражение для поиска bb-кодов IMG и их содержимого в сообщениях на форуме:
~\[img(?:=[\'"]?([^,]*?)(?:,[^]\'"]+)?[\'"]?)?]([^\[]+)?\[/img]~i
Пока это работает, но мне нужно определить исключения. Я должен найти все bb-коды IMG, которые НЕ окружены b-кодом TT- или CODE. Я не пытаюсь разобрать BBCodes (потому что это делается самим программным обеспечением форума).
Итак, я хочу, чтобы IMG bbcode отсюда (который работает, используя регулярное выражение выше):
Hello, this is an example: [img]xxx[/img] - Yay!
но не оттуда
[tt]this is a test [img]xxx[/img] yolo![/tt]
а не отсюда
[code=php]<?php
echo '[img=xxx][/img]';[/code]
Есть идеи, как этого добиться? Я использую PHP (на всякий случай, решение с использованием регулярных выражений невозможно).
Вы можете использовать этот шаблон против второго подшаблон для вашего матча
\[((?:(?!img).)*?)\](?:.*?)\[\/\1\]|\[img.*\](.*?)\[\/img\]
Других решений пока нет …