Регулярное выражение, ретроспективная и опережающая проверки

igor_ua

Новичок
Регулярное выражение, ретроспективная и опережающая проверки

Не совсем пойму как лучше сделать:

Есть примерно такой текст
[OPT]Options:[/OPT]
[OPTION VAL="XXX4"]Option 1[/OPTION]
[OPTION VAL="XXX3"]Option 2[/OPTION]
[OPTION VAL="XXX2"]Option 3[/OPTION]
[END]
Нужно/хочется регулярным выражением получить весь текст между строками
[OPT]Options:[/OPT] & [END]

Пытался пользваься ретроспективной и опережающей проверками, в принципе все хорошо, если между ними просто текст, а если там перносы строки и абсолютно любой текст - торможу :(
Например:
/(?<=[OPT]Options:[/OPT])(???)(?=[END])/i

Чтобы указать вместо (???)? Указывать (.*) - не подходит, т.к. могут быть переносы строк плюс конструкция .* - жадная, съедает все...
Перечислять все возможные символы? например [-_=...\d\w\s] (... - это нужно будет заменить на кучу др. символов) - как-то вроде не красиво получается :(
О чем я забыл? Какие есть др. варианты?

Спасибо!
 

igor_ua

Новичок
Вот такая конструкция не работает
([.\s]+)
Что, для меня не совсем пока понятно, почему...

-~{}~ 14.06.09 13:43:

Нет, не работает, т.к. (.+) - жадная, ищет последний [/END] во всем тексте...
 

Армян

Новичок
~\[OPT\]Options\:\[\/OPT\](.+)\[END\]~Uis

почитайте ман по регуляркам, про модификаторы :)
 

igor_ua

Новичок
Пример в данному случае абстрактный, просто уже не первый раз сталкиваюсь с таким вопросом, раньше решал др. способами, тут решил разобраться как все же нужно решать.
Разобрался, спасибо.
 
Сверху