У меня есть несколько исходных кодов, которые я применяю preg_match_all.
это то, что я пробовал:
$lazy = file_get_contents("Some_Source_code.txt");
if(!preg_match("#method_(.*)\(int var0, int var1, int var2\)#", $lazy, $function_name))
die("nothing here");
preg_match_all("#method_".$function_name[1]."\(.*\){1}#", $lazy, $matches);
print_r($matches);
но результат получается следующим образом:
Array
(
[0] => Array
(
[0] => method_2393(int var0, int var1, int var2)
[1] => method_2393(0, 0, 0)).equals(this.field_1351.getText().toString()))
)
)
ok, то, что я хочу, это $ matches [0] [1]. Но как я могу остановить его, как только он обнаружит закрывающиеся круглые скобки ")," как первый.
Я могу обработать строку после ее извлечения, но как это сделать с помощью регулярного выражения? Я искал ответы на подобные проблемы, но они были слишком конкретными.
Измените регулярное выражение как
#method_".$function_name[1]."\([^)]*\){1}#
Где вы ошибаетесь
#method_".$function_name[1]."\(.*\){1}#
здесь вы использовали \(.*\)
где .*
будет соответствовать чему-либо, включая )
Сделанные изменения
\([^)]*\)
здесь [^)]*
оно соответствует чему-либо другому, чем )
так что оно заканчивается первым вхождением в )
Вы также можете использовать ленивое сопоставление .*?
вместо .*
который уже готов и потребляет столько же символов, сколько может