[ID CC-CC2022] Почему не работает ленивый квантификатор?

  • Автор темы Автор темы afalbert
  • Дата начала Дата начала

afalbert

Топикстартер
12 лет на форуме
Сообщения
135
Реакции
100
Добрый день!
пытаюсь с помощью греп-стиля выделить содержимое последних скобок в абзаце.
а он выделяет все :-(

Снимок экрана 2019-09-16 в 20.02.02.png


как выделить только последнюю?
 
Это работает, большое спасибо, но почему не работает мое выражение? хочется понять
 
[^(]+\) - негативный поиск, дословно "искать любую последовательность символов, не являющихся скобкой, до закрывающей скобки"
Этот метод хорош.
А чтобы ваше выражение заработало, нужно поменять + на *.
2019-09-16_210553.png
 
Был неправ, мой вариант регулярки захватывает больше положенного. Вариант товарища lev лучше.
 
Если после последней скобки стоит, например, точка - не заработает.
 
Под частности можно написать условие "1 символ или ничего", типа \.?.
 
Последнее редактирование:
Вариант товарища lev меня полностью устроил, и я даже, кажется, понял почему не правильно моё выражение :-)
 
Квантификатор осуществляет поиск от первого символа до конца строки; то есть он нашел самую первую скобку в предложении и идет до самого конца строки, а затем начинает поиск в обратную сторону, пока не найдет вторую скобку. Таким образом он всегда будет захватывать максимальное количество символов.
Вариант товарища lev действует иначе - он ищет четкий паттерн первая скобка - последовательность не-скобок - вторая скобка - конец строки. Когда он находит искомую последовательность, он тупо останавливается и ничего больше не ищет. Лишние фрагменты не попадают в выборку, поскольку прямо за ними нет символа конца строки.
Лепота
 
если бы в выражении после скобки не было бы конца абзаца, "ленивый" квантификатор нашел бы вторую скобку и остановился бы. т.е. захватил бы минимальное кол-во символов. Но в моем выражении, он останавливается только когда находит скобку и конец абзаца, т.е. захватывает и все остальные скобки тоже
 
Да, так и есть. Я, наверное, зря расширил логический пример до самого большого охвата, это "жадный" квантификатор проходит до самого конца. Вы правы, ленивый остановится на ближайшей скобке.
Но логика у него внутри примерно та же, что и у жадного - в поисках символа конца строки он проходит до самого конца, включая в выборку все фрагменты в скобках.
 
Последнее редактирование: