Quantificadores
Quantificadores especificar quantas instâncias do elemento anterior (que pode ser um caractere, um agrupar ou uma classe de caracteres) devem estar presentes na entrada para uma correspondência ser localizado.
Quantificadores em .NET estrutura Regular Expressions
A tabela a seguir lista quantificadores suportados pelo .NET estrutura expressões regulares.As n e m quantidades são constantes inteiras.Para obter uma descrição da diferença entre lentas e greedy quantificadores, consulte a seção "Greedy e lento quantificadores" que segue a tabela.
Quantificador |
Descrição |
---|---|
* |
Corresponde ao elemento precedente zero ou mais vezes.É equivalente a {0}.* é um quantificador greedy cujo equivalente não greedy é *?. Por exemplo, a expressão regular \b91*9*\b tenta corresponder o dígito 9 Após um limite de palavra. 9 pode ser seguido de zero ou mais instâncias do dígito 1, que por sua vez pode ser seguido por zero ou mais instâncias do dígito 9. O exemplo a seguir ilustra essa expressão regular.De nove dígitos na seqüência de caracteres de entrada, cinco coincidir com o padrão e quatro (95, 929, 9129, e 9919), não.
|
+ |
Coincide com o elemento anterior um ou mais vezes.É equivalente a {1,}. + é um quantificador greedy cujo equivalente não greedy é +?. Por exemplo, a expressão regular \ba(n)+\w*? \b tries to match entire words that begin with the letter a followed by one or more instances of the letter n.O exemplo a seguir ilustra essa expressão regular.A expressão regular corresponde a palavras an, annual, announcement, e antiquee falhar corretamente corresponder à autumn e all.
|
? |
Coincide com o time de elemento zero ou um anterior.É equivalente a {0,1}. ? é um quantificador greedy cujo equivalente não greedy é ??. Por exemplo, a expressão regular \ban? \b tries to match entire words that begin with the letter a followed by zero or one instances of the letter n.Em outras palavras, ele tenta corresponder o palavras a e an. O exemplo a seguir ilustra essa expressão regular.
|
{n} |
Coincide com o elemento anterior exatamente n horários.{n} é um quantificador greedy cujo equivalente não greedy é {n}?. Por exemplo, a expressão regular \b\d+\,\d{3}\b tenta corresponder a um limite de palavra seguido por um ou mais dígitos Decimal, seguidos de três dígitos seguidos de um limite de palavra. O exemplo a seguir ilustra essa expressão regular.
|
{n,} |
Coincide pelo menos o elemento anterior n horários.{n,} é um quantificador greedy cujo equivalente não greedy é {n}?. Por exemplo, a expressão regular \b\d{2,}\b\D+ tenta corresponder a um limite de palavra seguido pelo menos dois dígitos seguidos por um limite de palavra e um caractere não dígito. O exemplo a seguir ilustra essa expressão regular.A expressão regular não corresponde a frase 7 days porque ele contém apenas um dígito decimal, mas ela corresponde com êxito as frases 10 weeks e 300 years.
|
{n,m} |
Coincide pelo menos o elemento anterior n, mas não mais de m, horas.{n,m} é um quantificador greedy cujo equivalente não greedy é {n,m}?. Por exemplo, a expressão regular (00\s){2,4} tenta corresponder a zero dígitos seguidos por um espaço entre dois e quatro ocorrências de dois. O exemplo a seguir ilustra essa expressão regular.Observe que a parte final da seqüência de caracteres de entrada inclui este padrão de cinco vezes em vez do máximo de quatro.No entanto, a parte inicial desse substring (até o espaço e o quinto emparelhar de zeros) encontra o padrão de expressão regular.
|
*? |
Coincide com o elemento anterior zero ou mais vezes, mas sistema autônomo algumas vezes sistema autônomo possíveis.É um quantificador lazy é a contraparte o quantificador greedy *. Por exemplo, a expressão regular \b\w*?oo\w*? \b matches all words that contain the string oo.O exemplo a seguir ilustra essa expressão regular.
|
+? |
Coincide com o elemento anterior um ou mais vezes, mas sistema autônomo algumas vezes sistema autônomo possíveis.É um quantificador lazy é a contraparte o quantificador greedy +. Por exemplo, a expressão regular \b\w+? \b matches one or more characters separated by word boundaries.O exemplo a seguir ilustra essa expressão regular.
|
?? |
Coincide com o time de elemento zero ou uma anterior, mas, algumas vezes possível.É um quantificador lazy é a contraparte o quantificador greedy ?. Por exemplo, a expressão regular ^(\s)*(System.)??Console.Write(Line)?? \(?? attempts to match the strings Console.Write or Console.WriteLine.A seqüência de caracteres também pode incluir System. antes de Console, e pode ser seguido por um parêntese de abertura. A seqüência de caracteres deve ser no início de uma linha, embora possa ser precedido por espaço em branco.O exemplo a seguir ilustra essa expressão regular.
|
{n}? |
Coincide com o elemento anterior exatamente n horários. É um quantificador lazy é o contador para o quantificador greedy {n}+. Por exemplo, a expressão regular \b(\w{3,}? \.){2}? \w{3,}? \b matches exactly two sets of characters followed by a period on a word boundary.Em seguida, ele é seguido de outro conjunto de caracteres e um limite de palavra.Essa expressão regular deve identificar o endereço do site.O exemplo a seguir ilustra a expressão regular.Observe que corresponde ao www.microsoft.com e mdsn.microsoft.com, mas não corresponde mywebsite ou mycompany.com.
|
{n,}? |
Coincide com o elemento anterior no lesistema autônomot n horários, mas sistema autônomo algumas vezes sistema autônomo possíveis. É um quantificador lazy é a contraparte o quantificador greedy {n,}. Consulte o exemplo para o {n}? quantificador para uma ilustração. A expressão regular esse exemplo usa o {n,} quantificador para coincidir com uma seqüência que tenha pelo menos três caracteres seguidos por um período. |
{n,m}? |
Coincide com o elemento anterior entre n e m horários, mas sistema autônomo algumas vezes sistema autônomo possíveis. É um quantificador lazy é a contraparte o quantificador greedy {n,m}. Por exemplo, a expressão regular \b[A-Z](\w*? \s*?){1,10}[.!?] matches sentences that contain between one and ten words.Ele coincide com um limite de palavra seguido por uma letra maiúscula seguida entre um e dez repetições de zero ou mais caracteres de palavra e, opcionalmente, um caractere de espaço.Em seguida, a correspondência é encerrada por um período, um ponto de exclamação ou um ponto de interrogação.O exemplo a seguir ilustra essa expressão regular.Corresponder a todas as frases na seqüência de caracteres de entrada, exceto para uma única sentença que contenha 18 palavras.
|
Quantificadores greedy e lentas
Um número das quantificadores tem duas versões:
Uma versão greedy.
Um quantificador greedy tenta corresponder o elemento que ela se aplica ao sistema autônomo muitas vezes sistema autônomo possíveis.
Uma versão não greedy (ou lenta).
Um quantificador não greedy tenta corresponder o elemento que ela se aplica ao sistema autônomo algumas vezes possível.
Para ilustrar a diferença, considere uma expressão regular muito simplista que se destina a extrair sistema autônomo quatro últimos dígitos de uma seqüência de números, sistema autônomo um número de cartão de crédito.A versão de expressão regular que usa o * quantificador greedy é \b.*([0-9]{4})\b. No entanto, dada uma seqüência de caracteres que contém dois números, conseguir exibir somente sistema autônomo quatro últimos dígitos do número da segundo, conforme mostrado no exemplo a seguir.
Dim greedyPattern As String = "\b.*([0-9]{4})\b"
Dim input1 As String = "1112223333 3992991999"
For Each match As Match In Regex.Matches(input1, greedypattern)
Console.WriteLine("Account ending in ******{0}.", match.Groups(1).Value)
Next
' The example displays the following output:
' Account ending in ******1999.
string greedyPattern = @"\b.*([0-9]{4})\b";
string input1 = "1112223333 3992991999";
foreach (Match match in Regex.Matches(input1, greedyPattern))
Console.WriteLine("Account ending in ******{0}.", match.Groups[1].Value);
// The example displays the following output:
// Account ending in ******1999.
Isso não é o comportamento desejado.A expressão regular não corresponde ao número primeiro porque o * quantificador tenta corresponder o elemento anterior sistema autônomo muitas vezes sistema autônomo possível em toda a seqüência de caracteres, e, portanto, encontrar sua correspondência no participante da seqüência de caracteres.
No entanto, uma expressão regular equivalente que utiliza o *?quantificador lazy produz o comportamento esperado, sistema autônomo mostra o exemplo a seguir.
Dim lazyPattern As String = "\b.*?([0-9]{4})\b"
Dim input2 As String = "1112223333 3992991999"
For Each match As Match In Regex.Matches(input2, lazypattern)
Console.WriteLine("Account ending in ******{0}.", match.Groups(1).Value)
Next
' The example displays the following output:
' Account ending in ******3333.
' Account ending in ******1999.
string lazyPattern = @"\b.*?([0-9]{4})\b";
string input2 = "1112223333 3992991999";
foreach (Match match in Regex.Matches(input2, lazyPattern))
Console.WriteLine("Account ending in ******{0}.", match.Groups[1].Value);
// The example displays the following output:
// Account ending in ******3333.
// Account ending in ******1999.
Na maioria dos casos, as expressões regulares com quantificadores greedy e lentas retornam correspondências mesmas.Eles geralmente retornam resultados diferentes quando usado com o período (. ) metacharacter, which matches any character.
Consulte também
Outros recursos
Elementos de linguagem das expressões regulares
Date |
History |
Motivo |
---|---|---|
Julho de 2008 |
Revisado exaustivamente. |
Correção de bug do conteúdo. |