Ruby/Подробнее о строках: различия между версиями

Содержимое удалено Содержимое добавлено
Нет описания правки
→‎Жадность: рефакторинг :)
Строка 519:
{{info|Нежадные квантификаторы иногда называют щедрыми.}}
 
Сперва он начинает искать последовательность длины <code>m</code> (вот так щедростьжадность), и если правило не срабатывает, он начинает уменьшать длинну последовательности вплоть до <code>n</code>. Так работают обычные (щедрые)жадные кванторы.
 
Но иногда щедрыежадные кванторы не могут справиться с задачей. Например, в файле на языке HTML мы осуществляем поиск ссылок (тег <code>&lt;a&gt;</code>). Правило с щедрымжадным квантором найдёт начало первой ссылки и конец последней. Весь остальной текст оно примет за текст ссылки. Понятно, что работать верно оно будет только в двух случаях: когда в тексте нет ссылок или когда ссылка только одна.
 
Для решения вышеописанной проблемы и был придуман так называемый жадныйщедрый квантификатор. От щедрогожадного он отличается обратным ходом обработки, то есть длину последовательности он не уменьшает от <code>m</code> к <code>n</code>, а наоборот, увеличивает от <code>n</code> до <code>m</code>. Научить жадностищедрости квантификатор можно знаком вопроса <code>?</code> после любого (щедрого)жадного квантификатора.
 
<source lang="ruby">"Раз, два, три!".scan(/[А-Яа-я]+?/)
Строка 530:
#=> "Жуй жвачку, животное!"</source>
 
{{info|С рождения квантификаторы щедрыжадные. ЖадностьЩедрость — обретаемый признак.}}
 
{{info|К сожалению, здесь авторы "учебника" все перепутали. На самом деле, жадный квантификатор называется жадным (или - максимальным) потому, что он пытается забрать все себе, а щедрый (минимальный) - стремится отдать все другим. И потому с рождения квантификаторы жадны, а щедрость — обретаемый признак.
ВсемПодробнее сомневающимсявы -можете читатьузнать об этом в книге [http://www.books.ru/shop/books/82357 книгу Джона Фридла «Регулярные выражения»]}}
 
Всем сомневающимся - читать [http://www.books.ru/shop/books/82357 книгу Джона Фридла «Регулярные выражения»]}}
 
=== Хитрости ===