Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Программирование Новый топик    Ответить
 Помогите найти ошибку в регулярном выражении  [new]
Alibek B.
Member

Откуда:
Сообщений: 3315
Настраиваю редактор, в редакторе есть возможность автоматической навигации по функциям, описание которых задается регулярным выражением.
Текст в редакторе, например, такой:
	function debug($mode=null);                                              // Режим отладки
	function pmode($mode=null);                                              // Режим постоянных соединений (пул соединений)
	final public function __construct()
	{
		...
	}


Задаю такой шаблон:
^[ \t]*(final |abstract )?(public |private |protected )?(static )?function[ \t].*\(.*?\)

Но вторая строка в этот шаблон попадает целиком (с комментарием), хотя я вроде бы для выражения внутри скобок указываю ленивый квантификатор.
26 сен 19, 10:43    [21979533]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибку в регулярном выражении  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6384
Alibek B.
Но вторая строка в этот шаблон попадает целиком (с комментарием), хотя я вроде бы для выражения внутри скобок указываю ленивый квантификатор.

Все правильно.
Потому что сначала .* матчит по максимуму включая все группы скобок кроме последней, а потом \(.*?\) матчит последнюю группу скобок.

Так что нужен еще один "?".
.*?\(.*?\)

Но лучше уже просто написать матч для имени функции вместо .*
26 сен 19, 17:51    [21980168]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибку в регулярном выражении  [new]
Alibek B.
Member

Откуда:
Сообщений: 3315
Понял, спасибо.
26 сен 19, 19:31    [21980250]     Ответить | Цитировать Сообщить модератору
Все форумы / Программирование Ответить