Una expresión regular para extraer PHP funciones de archivos de código php
-
21-09-2019 - |
Pregunta
Estoy tratando de hacer una expresión regular para extraer PHP funciones de código fuente PHP. Hasta ahora he utilizado una expresión regular recursiva para extraer todo entre {} pero por otra parte también coincide con cosas como si las declaraciones. Cuando yo uso algo como:
preg_match_all("/(function .*\(.*\))({([^{}]+|(?R))*})/", $data, $matches);
No funciona cuando hay más de 1 función en el archivo (probablemente debido a que utiliza la parte 'función' en la recursividad también).
¿Hay alguna manera de hacer esto?
Ejemplo archivo:
<?php
if($useless)
{
echo "i don't want this";
}
function bla($wut)
{
echo "i do want this";
}
?>
Gracias
Otros consejos
Se trasladó aquí desde duplicado pregunta: PHP, expresiones regulares y nuevas líneas
solución 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. Como se sugirió anteriormente tokenizer es la forma preferible ir.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow