Перейти к содержанию
СофтФорум - всё о компьютерах и не только

помогите составить регулярное выражение


Рекомендуемые сообщения

задача следующая: пишу программу обучающую азам программирования и алгоритмизации

она обрабатывает некий язык программирования

надо чтобы данный язык поддерживал такие конструкции, как цикл и условное ветвление

собственно при обработке я выдераю блоки кода регулярными выражениями

проблема в том, что нужна возможность обрабатывать вложеные конструкции

чтобы было понятнее покажу на примере

есть код:

код

ЕСЛИ условие ТО

код

ЕСЛИ
условие
ТО

код

ИНАЧЕ

код

КОНЕЦ ЕСЛИ

код

КОНЕЦ ЕСЛИ

код

ЕСЛИ условие ТО

код

КОНЕЦ ЕСЛИ

код

если мы выдергиваем код "жадной" регуляркой:

/ЕСЛИ\s(.*?)\sТО\s(.*?)\sКОНЕЦ\sЕСЛИ/i

то выдергивается следующее:

код

ЕСЛИ условие ТО

код

ЕСЛИ
условие
ТО

код

ИНАЧЕ

код

КОНЕЦ ЕСЛИ

код

КОНЕЦ ЕСЛИ

код

ЕСЛИ условие ТО

код

КОНЕЦ ЕСЛИ

код

а если выдергиваем обычной регуляркой

/ЕСЛИ\s(.*?)\sТО\s(.*)\sКОНЕЦ\sЕСЛИ/i

то выдергивается так:

код

ЕСЛИ условие ТО

код

ЕСЛИ
условие
ТО

код

ИНАЧЕ

код

КОНЕЦ ЕСЛИ

код

КОНЕЦ ЕСЛИ

код

ЕСЛИ условие ТО

код

КОНЕЦ ЕСЛИ

код

а мне надо чтобы выдергивалось так:

код

ЕСЛИ условие ТО

код

ЕСЛИ
условие
ТО

код

ИНАЧЕ

код

КОНЕЦ ЕСЛИ

код

КОНЕЦ ЕСЛИ

код

ЕСЛИ условие ТО

код

КОНЕЦ ЕСЛИ

код

собственно не соображу как составить регулярку

Ссылка на комментарий
Поделиться на другие сайты

Сложная задача

Вообшем то надо читать о рекурсивних preg-ов

http://bg2.php.net/manual/en/regexp.reference.php

Да и для парсера не знаю если preg самое удачное. Разсмотрите если хотите в miphpf.com (скачайте miphpf framework) как сделань miTemplateParser, там есть вложение тегов <mi:section>

Удачи :(

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...