Регулярное выражение PHP для извлечения функций PHP из файлов кода.
-
21-09-2019 - |
Вопрос
Я пытаюсь создать регулярное выражение PHP для извлечения функций из исходного кода PHP.До сих пор я использовал рекурсивное регулярное выражение для извлечения всего между {}, но затем оно также соответствует таким вещам, как операторы if.Когда я использую что-то вроде:
preg_match_all("/(function .*\(.*\))({([^{}]+|(?R))*})/", $data, $matches);
Это не работает, если в файле более одной функции (вероятно, потому, что в рекурсивности также используется часть «функция»).
Есть какой-либо способ сделать это?
Пример файла:
<?php
if($useless)
{
echo "i don't want this";
}
function bla($wut)
{
echo "i do want this";
}
?>
Спасибо
Решение
регулярные выражения - неправильный способ сделать это.Учитывать токенизатор или отражение
Другие советы
Перенесено сюда из дублирующего вопроса: PHP, Regex и новые строки
Решение регулярного выражения:
$regex = '~
function #function keyword
\s+ #any number of whitespaces
(?P<function_name>.*?) #function name itself
\s* #optional white spaces
(?P<parameters>\(.*?\)) #function parameters
\s* #optional white spaces
(?P<body>\{.*?\}) #body of a function
~six';
if (preg_match_all($regex, $input, $matches)) {
print_r($matches);
}
P.S.Как было предложено выше, токенизатор является предпочтительным способом.