Соответствует многострочному регулярному выражению, начиная с if и заканчивая строкой, начинающейся с закрывающей фигурной скобки - PullRequest
0 голосов
/ 18 марта 2019

У меня длинный PHP-класс со множеством блоков if, которые я хочу преобразовать с помощью скрипта Python. Поэтому я хочу сопоставить каждый if-блок «родительского уровня» и передать его в виде элемента в список для дальнейшей обработки.

pattern = re.compile(r'^if[^(\n\})]*\}$', re.M)
result = re.findall(pattern, filecontent)

Так что я попробовал много вариантов сейчас, но безуспешно. Конечно, у нас есть случай вложенных операторов if в этих блоках if. Так что мы не можем просто соответствовать до следующей закрывающей фигурной скобки.

К счастью, код четко отформатирован, поэтому я могу сопоставить несколько строк, начиная со строки, начинающейся с «если», и заканчивая закрывающей фигурной скобкой в ​​начале строки.

^if         // line starting with 'if'
[^(\n\})]*  // followed by zero or more characters that are not
            // a closing curly brace preceded by a newline character
\n\}$       // ending with a closing curlybrace preceded by \n

Этот подход, кажется, моя лучшая попытка. Но это ничего не соответствует.

Вот некоторый фрагмент для тестирования, обработка которого должна привести к 3 элементам списка: https://pastebin.com/2WHC1k6f

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...