Une el cuerpo de una función usando Regex
Dada una función ficticia como tal:
public function handle()
{
if (isset($input['data']) {
switch($data) {
...
}
} else {
switch($data) {
...
}
}
}
Mi intención es obtener el contenido de esa función, el problema es hacer coincidir patrones anidados de llaves{...}
.
Me he encontradopatrones recursivos pero no podía entender una expresión regular que coincidiera con el cuerpo de la función.
He intentado lo siguiente (sin recurrencia):
$pattern = "/function\shandle\([a-zA-Z0-9_\$\s,]+\)?". // match "function handle(...)"
'[\n\s]?[\t\s]*'. // regardless of the indentation preceding the {
'{([^{}]*)}/'; // find everything within braces.
preg_match($pattern, $contents, $match);
Ese patrón no coincide en absoluto. Estoy seguro de que es lo último que está mal'{([^{}]*)}/'
ya que ese patrón funciona cuando no hay otros aparatos dentro del cuerpo.
Al reemplazarlo con:
'{([^}]*)}/';
Coincidió hasta el cierre}
del interruptor dentro delif
declaración y se detuvo allí (incluyendo}
del interruptor pero excluyendo el delif
)
Además de este patrón, el mismo resultado:
'{(\K[^}]*(?=)})/m';