Corresponder o corpo de uma função usando Regex
Dada uma função fictícia como tal:
public function handle()
{
if (isset($input['data']) {
switch($data) {
...
}
} else {
switch($data) {
...
}
}
}
Minha intenção é obter o conteúdo dessa função, o problema é combinar padrões aninhados de chaves{...}
.
Eu me depareipadrões recursivos mas não conseguia entender um regex que correspondesse ao corpo da função.
Eu tentei o seguinte (sem recursão):
$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);
Esse padrão não corresponde a todos. Tenho certeza que é o último bit que está errado'{([^{}]*)}/'
pois esse padrão funciona quando não há outros aparelhos no corpo.
Substituindo-o por:
'{([^}]*)}/';
Combinou até o fechamento}
do interruptor dentro doif
declaração e parou por aí (incluindo}
do interruptor, mas excluindo o doif
)
Além desse padrão, o mesmo resultado:
'{(\K[^}]*(?=)})/m';