Un'espressione regolare PHP per estrarre le funzioni php file di codice
-
21-09-2019 - |
Domanda
Sto cercando di fare una regex PHP per estrarre le funzioni dal codice sorgente PHP. Fino ad ora ho usato un'espressione regolare ricorsiva per estrarre tutto tra {}, ma poi corrisponda anche cose come se le dichiarazioni. Quando io uso qualcosa come:
preg_match_all("/(function .*\(.*\))({([^{}]+|(?R))*})/", $data, $matches);
Non funziona quando c'è più di 1 funzione nel file (probabilmente perché utilizza la parte 'funzione' nella ricorsività troppo).
Esiste un modo per fare questo?
file Esempio:
<?php
if($useless)
{
echo "i don't want this";
}
function bla($wut)
{
echo "i do want this";
}
?>
Grazie
Soluzione
espressioni regolari è il modo sbagliato per farlo. Considerare tokenizer o riflessione
Altri suggerimenti
sono trasferito qui da domanda duplicato: PHP, Regex e nuove linee
soluzione 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. Come è stato suggerito sopra tokenizer è il modo preferibile andare.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow