Завершающее регулярное выражение со специфическим символом при первом появлении

0

У меня есть несколько исходных кодов, которые я применяю 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]. Но как я могу остановить его, как только он обнаружит закрывающиеся круглые скобки ")," как первый.

Я могу обработать строку после ее извлечения, но как это сделать с помощью регулярного выражения? Я искал ответы на подобные проблемы, но они были слишком конкретными.

Теги:
preg-match-all

1 ответ

1
Лучший ответ

Измените регулярное выражение как

#method_".$function_name[1]."\([^)]*\){1}#

Где вы ошибаетесь

#method_".$function_name[1]."\(.*\){1}#

здесь вы использовали \(.*\) где .* будет соответствовать чему-либо, включая )

Сделанные изменения

  • \([^)]*\) здесь [^)]* оно соответствует чему-либо другому, чем ) так что оно заканчивается первым вхождением в )

  • Вы также можете использовать ленивое сопоставление .*? вместо .* который уже готов и потребляет столько же символов, сколько может

  • 0
    Это то что мне нужно. Хорошо объяснил! ... Спасибо
  • 0
    @ user3673204 ты всегда weclome :) рад, что смог помочь !!!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню