Resumo : neste tutorial, você aprenderá sobre os quantificadores preguiçosos para encontrar a menor correspondência em uma string de entrada.
Introdução aos quantificadores preguiçosos
Quantificadores preguiçosos, também conhecidos como quantificadores não gananciosos, são um recurso em expressões regulares que modificam o comportamento dos quantificadores para corresponder o mínimo possível. Eles fornecem a menor correspondência possível que satisfaz o padrão de expressão regular.
Por padrão, os quantificadores em expressões regulares são gananciosos , o que significa que eles correspondem tanto quanto possível. No entanto, os quantificadores preguiçosos funcionam de maneira oposta. Eles correspondem o menos possível, ao mesmo tempo que permitem que o padrão geral seja satisfeito.
Quantificadores preguiçosos são indicados anexando um ponto de interrogação ( ?
) aos quantificadores padrão.
A tabela a seguir mostra os quantificadores gananciosos, quantificadores preguiçosos e os significados dos quantificadores preguiçosos:
Quantificadores gananciosos | Quantificadores Preguiçosos | Significado do quantificador preguiçoso |
---|---|---|
* | *? | Combine zero ou mais ocorrências (o menor número possível) |
+ | +? | Combine uma ou mais ocorrências (o menor número possível) |
? | ?? | Combine zero ou uma ocorrência (de preferência zero) |
{n} | {n}? | Combine exatamente n ocorrências |
{n,} | {n,}? | Combine n ou mais ocorrências |
{n,m} | {n,m}? | Correspondência entre n e m ocorrências (o menor número possível) |
Exemplo de quantificadores preguiçosos
O exemplo a seguir ilustra como usar um quantificador lento para extrair valores de atributos de uma tag de entrada:
using System.Text.RegularExpressions;
using static System.Console;
var html = """<input type="submit" values="Send">""";
var pattern = """
".+?"
""";
var matches = Regex.Matches(html, pattern);
foreach (var match in matches)
{
WriteLine(match);
}
Linguagem de código: C# ( cs )
Saída:
"submit"
"Send"
Linguagem de código: JSON/JSON com comentários ( json )
Como funciona.
- O programa começa com a
using
diretiva necessária para incluir aRegex
classe doSystem.Text.RegularExpressions
namespace. - O programa então inclui
using static System.Console;
para permitir o uso doWriteLine
método sem especificar explicitamente aConsole
classe. - A string HTML é definida como
html
uma string bruta ("""
) que contém um elemento de entrada HTML com o atributotype="submit"
evalues="Send"
. - O padrão de expressão regular é definido como
pattern
o uso de uma string bruta com aspas triplas ("""
) para evitar escapar do ”dentro da expressão regular. O padrão".+?"
corresponde aos atributos da tag HTML de entrada, incluindo aspas (“). O quantificador lento?
garante que a correspondência seja a menor possível. - O programa usa o
Regex.Matches()
método para encontrar todas as correspondências do padrão na string HTMLhtml
. Ele pega ahtml
string e ospattern
argumentos as e retorna uma coleção deMatch
objetos que representam as correspondências encontradas. - O programa então itera sobre cada
Match
objeto damatches
coleção usando umforeach
loop e usa oWriteLine
método para imprimir cada correspondência no console dentro do loop.
Resumo
- Um quantificador lento em expressões regulares corresponde o mínimo possível e ainda satisfaz o padrão.