Сопоставить тело функции с помощью Regex
Дана фиктивная функция как таковая:
public function handle()
{
if (isset($input['data']) {
switch($data) {
...
}
} else {
switch($data) {
...
}
}
}
Мое намерение состоит в том, чтобы получить содержимое этой функции, проблема заключается в сопоставлении вложенных шаблонов фигурных скобок{...}
.
Я сталкивалсярекурсивные паттерны но я не мог разобраться с регулярным выражением, которое соответствовало бы телу функции.
Я пробовал следующее (без рекурсии):
$pattern = "/function\shandle\([a-zA-Z0-9_\$\s,]+\)?". // match "function handle(...)"
'[\n\s]?[\t\s]*'. // regardless of the indentation preceding the {
'{([^{}]*)}/'; // find everything within braces.
preg_match($pattern, $contents, $match);
Этот шаблон не соответствует вообще. Я уверен, что это последний бит, который не так'{([^{}]*)}/'
поскольку этот шаблон работает, когда в теле нет других фигурных скобок.
Заменив его на:
'{([^}]*)}/';
Это соответствует до закрытия}
переключателя внутриif
Заявление и остановился там (в том числе}
выключателя, но исключая тот изif
).
Как и этот шаблон, тот же результат:
'{(\K[^}]*(?=)})/m';