Un regex PHP pour extraire les fonctions php à partir de fichiers de code
-
21-09-2019 - |
Question
Je suis en train de faire une regex PHP pour extraire les fonctions à partir du code source php. Jusqu'à présent, je l'ai utilisé une expression régulière récursif pour extraire tout entre {}, mais il correspond aussi à des choses comme si les déclarations. Quand j'utiliser quelque chose comme:
preg_match_all("/(function .*\(.*\))({([^{}]+|(?R))*})/", $data, $matches);
Il ne fonctionne pas quand il y a plus de 1 fonction dans le fichier (probablement parce qu'il utilise la partie « fonction » dans le récursivité aussi).
Est-il possible de le faire?
Exemple de fichier:
<?php
if($useless)
{
echo "i don't want this";
}
function bla($wut)
{
echo "i do want this";
}
?>
Merci
Autres conseils
déménagés ici de double question: PHP, Regex et de nouvelles lignes
solution 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. Comme on l'a suggéré plus haut tokenizer est beaucoup préférable d'aller.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow