"Нежадные" регулярные выражения

Ivan8209

Объясните, как может быть такое:

*? ноль или более раз ("не жадный" то же что {0,}?
+? один или более раз ("не жадный" то же что {1,}?
? ноль или один раз ("не жадный" то же что {0,1}?
{n}? точно n раз ("не жадный")
{n,}? не менее n раз ("не жадный")
{n,m}? не менее n но не более m раз ("не жадный")

Пишут --- не думают.
---
...Я работаю...

Geddi-S

Это значит, что на строку 123123123
при поиске (123)+? получим только 123, а не 123123123
в перле, например, регулярные выражения по умолчанию жадные
UPd. хотя, наверное, ты не об этом спрашиваешь, это слишком просто видимо, вопрос в тупости применения слова "жадный" к данным паттернам... или еще чего

Ivan8209

> Это значит, что на строку 123123123
> при поиске (123)+? получим только 123, а не 123123123
Чем "нежадное" "(123)+" отличается от "123"?
Но самое главное --- чем "нежадное" "1{10}" отличается от _обычного_?
Если они через "нежадность" вводят откаты назад,
например, при обработке ".*a" (именно через _откат_,
я понимаю, что можно такое сделать и р. в. то какие это,
к чёрту, регулярные выражения?
---
...Я работаю...

Marinavo_0507

На перле можно записать и нерегулярные выражения, для тебя это новость?

Ivan8209

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

tokuchu

Чем "нежадное" "(123)+" отличается от "123"?
Пример:
рег. выражение: "456(123)+?456"
строка: "456123123456"

Ivan8209

> Пример:
> рег. выражение: "456(123)+?456"
> строка: "456123123456"
Повторяю вопрос.
Оно его делает именно как регулярное или через откат?
---
...Я работаю антинаучным аферистом...

Geddi-S

Именно.
Применяется прежде всего для выделения периода (по крайней мере, у меня..).

tokuchu

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

Ivan8209

Я спрашиваю не о том, как "можно", а о том, как _есть_.
Разница видна?
---
"Истина всегда конкретна."

tokuchu

Я спрашиваю не о том, как "можно", а о том, как _есть_.
Разница видна?
Если бы это было так, то ты спрашивал бы о том, как есть _там-то_ или _там-то_. Потому, что за все библиотеки тебе никто же отвечать не будет.
Заранее скажу, что этим вопросом не интересовался.

Ivan8209

> Если бы это было так, то ты спрашивал бы о том,
> как есть _там-то_ или _там-то_.
Про перл не я первый сказал.
Ну, ещё PCRE интересуют.
> Заранее скажу, что этим вопросом не интересовался.
Ясно.
---
...Я работаю...

tokuchu

Про перл не я первый сказал.
Я тоже про перл ничего не говорил.

Ivan8209

Зато по-перловски написал.
---
"Рот фронт, группенфюрер..."

Anna74

Есть книжка
Фридл Регулярные выражения Mastering Regular Expressions
И даже не одно издание.
там вроде было как это работает

tokuchu

Зато по-перловски написал.
Разве? По-моему, ещё как минимум grep такую нотацию поддерживает.

Ivan8209

> По-моему, ещё как минимум grep такую нотацию поддерживает.
Поддерживать-то поддерживает, только "A+?" означает то же, что и "A*":

$ echo 112112 | egrep '^.+?2$'
112112

маны читать надо, ибо рулез.
---
"Аллах не ведёт людей неверных."

tokuchu

Вот же как оно. И sed тоже себя так ведёт. Я жил в неведении.

apl13

$ echo 112112 | egrep '^.+?2$'
112112
Э-э-э... меня глючит, или тут жадный, нежадный - без шансов?..

Ivan8209

"Нежадный" должен быть остановиться на первой двойке.
---
...Я работаю антинаучным аферистом...

artimon

Не должен, т.к. там стоит '$'.
нежадность означает, взять как можно меньше, но при этом постараться что бы совпадение произошло.
Впрочем, поскольку grep не поддерживает нежадность, для него запись
^.+?2$
означает
^(.+)?2$

slonishka

+1. тоже этот пример не осилил, но побоялся контре отвечать.

tokuchu

+1. тоже этот пример не осилил, но побоялся контре отвечать.

Пример некорректный, но суть дела с grep это не менят.
Оставить комментарий
Имя или ник:
Комментарий: