Um regex PHP para extrair funções PHP dos arquivos de código
-
21-09-2019 - |
Pergunta
Estou tentando fazer um PHP Regex para extrair funções do código -fonte do PHP. Até agora, eu usei um regex recursivo para extrair tudo entre {}, mas também corresponde a coisas como as instruções. Quando eu uso algo como:
preg_match_all("/(function .*\(.*\))({([^{}]+|(?R))*})/", $data, $matches);
Ele não funciona quando há mais de 1 função no arquivo (provavelmente porque ele também usa a parte da 'função' na recursividade).
Há alguma maneira de fazer isso?
Arquivo de exemplo:
<?php
if($useless)
{
echo "i don't want this";
}
function bla($wut)
{
echo "i do want this";
}
?>
Obrigado
Outras dicas
Mudou para cá da pergunta duplicada: PHP, Regex e novas linhas
Solução 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);
}
PS, como foi sugerido acima, o Tokenizer é o caminho preferível.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow