Использование регулярных выражений для разбора кода - ДЕЙСТВИТЕЛЬНО плохая идея. Взгляните на Tokenizer PHP , который вы можете использовать для разбора PHP-кода в массив токенов. Вы можете использовать этот массив, чтобы найти нужную информацию.
Вы также можете посмотреть исходный код PHP-Token-Reflection как пример того, как получить значимую информацию из этих токенов.
Как правило, вам нужно будет найти вхождений T_PARENT T_STRING вхождений с 'parent' в качестве содержимого строки, за которым следует T_DOUBLE_COLON, за которым следует еще один T_STRING, содержащий имя метода, а затем идти вперед и начинать считать глубина скобок - всякий раз, когда вы добираетесь до '(', увеличивайте счетчик на единицу. Всякий раз, когда вы добираетесь до ')', уменьшайте счетчик на единицу. Ведите запись всего, что вы найдете в процессе, пока счетчик не вернется к 0.
Нечто подобное должно работать (на самом деле не проверено):
<?php
$tokens = tokens_get_all(...);
for ($i=0, $size = count($tokens); $i < $size; $i++( {
if ($tokens[$i][0] === T_STRING && $tokens[$i][1] === 'parent' && $tokens[++$i][0] === T_DOUBLE_COLON && $tokens[++$i][0] === T_STRING) {
$method = $tokens[$i][1];
$depth = 0;
$contents = array();
do {
$contents[] = $token = $tokens[++$i];
if ($token === '(') {
$depth++;
} elseif ($token === ')') {
$depth--;
}
} while ($depth > 0);
echo "Call to $method with contents:\n";
print_r(array_slice($contents, 1, -1)); // slices off the opening '(' and closing ')'
}
}