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

È stato utile?

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
scroll top