LINUX.ORG.RU

Ленивые регулярные выражения. Помогите понять ??

 , ,


1

2

как работает /11??1/ и чем отличается от /11?1/ ? Также где это применяеться

Прошу приводить примеры попроще, и обьяснить работу sed при выполнении данного примера.



Последнее исправление: cetjs2 (всего исправлений: 2)

Пример попроще, из жизни: глупый вася и глупый петя выбирали свой жизненный путь. Глупый вася стал программистом, но зарабатывал мало, нервничал, не справлялся с работой и часто бывал уволен под дружный хохот - потому что глупый. Теперь живет голодранцем и в целом несчастен.
А глупый петя пошел барыжить из ларька пивом и мобильными телефонами и все у него стало хорошо: нашел себе глупую жену, детей нарожали глупых, но здоровых, пузо отрастил и в целом очень доволен.

thesis ★★★★★
()
Ответ на: комментарий от thesis

Жизненно… С себя писал?

По сабжу:

Прошу приводить примеры попроще, и обьяснить работу sed при выполнении данного примера.

Не выйдет. Регулярки — это магия (в твоём случае — чёрная), так что проще не выйдет. А если очень хочется проще, то бросай ты это дело, верно thesis говорит. (=

r3lgar ★★★★★
()
Ответ на: комментарий от rebootcomp

К теме, к теме. Был еще умный коля, который знает про гугло и умеет читать документацию, пробовать, ошибаться и делать выводы. Он работает в самой клевой айти-компании и зарабатывает миллион долларов в час. Будь как коля. (Ну или как петя - от него тоже немало пользы).

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 1)
Ответ на: комментарий от rebootcomp
+[~]$ echo '112' | perl -pe 's/11??/match/'
match12
+[~]$ echo '112' | perl -pe 's/11?/match/'
match2
xaizek ★★★★★
()
Ответ на: комментарий от rebootcomp
$ perl -E 'say ("2x" =~ /\d?(*COMMIT)\dx/ ? "success" : "fail")'
fail

$ perl -E 'say ("2x" =~ /\d??(*COMMIT)\dx/ ? "success" : "fail")'
success

Т.е. в случае с одним вопросиком сначала захватывается «2», но потом она бы отдалась в пользу стоящего дальше \d, т.к. оно обязательное в отличие от первого с вопросиком. Произошел бы так называемый Backtracking. В целом бы выражение отработало, но за 1 шаг больше, чем второе. Но тут мы поставили спец. правило (*COMMIT), которое запрещает Backtracking, дабы увидеть, что произойдет fail.

Второе правило более умное - видит, что правило дальше как раз матчит с текущей позиции и даже не пытается захватить «2». Таким образом и Backtracking'a не будет. Всё отработает за 1 шаг быстрее.

Olegymous ★★★
()

Осспаде, люди, какой в жопу перл и сед.
ТС, идешь на https://regex101.com/
Убираешь флаг /g
В строку пишешь ZZZZZ
В регулярку пишешь ZZ??
Потом один вопросик убираешь.
Между делом пыришься в «explanation».
Если это тебе не поможет - тебе не поможет ничто.

thesis ★★★★★
()
Ответ на: комментарий от thesis

Плюсую этого робота
При двух вопросиках можно в строку ещё записать ZZX, чтобы совсем наглядно было

HerrWeigel ★★★★
()
Последнее исправление: HerrWeigel (всего исправлений: 1)

Ленивые регулярные выражения
обьяснить работу sed при выполнении данного примера

1) нет в седе ленивых

2) и нет '?' (BRE), в awk - есть (ибо ERE), но все тот же «longest of the leftmost match» — будет: 11?? == 1(1{0,1}){0,1} (если gawk --posix)

http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html

anonymous
()
Ответ на: комментарий от thesis

орам скакале и админе в рот ебалейобане козлике по горамам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и админе в рот ебалейобане козлике по горам скакале и

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.