Imagine, você precisa combinar rapidamente um texto dentro de <b>
tags. E você não quer carregar nenhuma biblioteca de análise XML / HTML.
Eu primeiro pensei em:
str = "Lorem <b>ipsum</b> dolor sit <b>amet</b>, consectetur adipiscing elit."
str.scan /<b>.*</b>/
=> ["<b>ipsum</b> dolor sit <b>amet</b>"]
que combinam com tudo do primeiro <b>
ao último </b>
.
E não é isso que eu quero.
Isso acontece porque o operador estrela é ganancioso por padrão.
Para torná-lo desagradável (ou relutante), basta adicionar um ponto de interrogação atrás:
str.scan /<b>.*?</b>/
=> ["<b>ipsum</b>", "<b>amet</b>"]
Isso é melhor.
Você também pode aplicar isso aos operadores: +, {} e o próprio ponto de interrogação.