У меня длинный 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