Resumo : neste tutorial, você aprenderá como usar C# regex lookahead na expressão regular para corresponder apenas se ela for seguida por outro padrão.
Introdução ao C# Regex Lookahead
O regex lookahead é um recurso em expressões regulares que permite corresponder A apenas se ele for seguido por B. A sintaxe do regex lookahead é a seguinte:
A(?=B)
Linguagem de código: C# ( cs )
Este lookahead de regex corresponde a A somente se for seguido por B.
Suponha que você tenha a seguinte string:
"1 shark is 5 feet long"
Linguagem de código: C# ( cs )
E você deseja corresponder ao número 5 que é seguido por um espaço e a string literal “pés”, mas não o número 1. Para fazer isso, você pode usar o lookahead de regex assim:
\d+(?=\s*feet)
Linguagem de código: C# ( cs )
Este padrão de expressão regular corresponde a um ou mais dígitos, mas apenas se eles forem seguidos por zero ou mais caracteres de espaço em branco e pela palavra “pés”.
Aqui está o programa:
using System.Text.RegularExpressions;
using static System.Console;
var text = "1 shark is 5 feet long";
var pattern = @"\d+(?=\s*feet)";
var matches = Regex.Matches(text, pattern);
foreach (var match in matches)
{
WriteLine(match);
}
Linguagem de código: C# ( cs )
C# Regex múltiplos lookaheads
Expressões regulares oferecem suporte a vários lookaheads com a seguinte sintaxe:
A(?=B)(?=C)
Linguagem de código: C# ( cs )
Nesta sintaxe, temos dois lookaheads. A A(?=B)(?=C)
expressão regular corresponde ao padrão A
se for seguida por B
e C
.
Aqui está como o mecanismo regex processa:
- Primeiro, combine o padrão
A
. - Em segundo lugar, avalie o primeiro lookahead
(?=B)
na posição imediatamente apósA
. Se não corresponder, o mecanismo regex será interrompido. - Terceiro, avalie o segundo lookahead
(?=C)
na posição imediatamente apósB
. Se não corresponder, o mecanismo regex será interrompido. - Finalmente, se ambos os testes forem aprovados, o mecanismo regex retornará a correspondência para o padrão
A
.
Em teoria, você pode ter quantas antecipações quiser.
Lookaheads negativos de Regex
Lookahead negativo nega um lookahead. Corresponde a A apenas se não for seguido por B:
A(?!B)
Linguagem de código: C# ( cs )
Lookaheads negativos são úteis quando você deseja especificar exclusões em seus padrões de expressão regular. Eles ajudam você a encontrar correspondências que não possuem determinados padrões.
O exemplo a seguir usa uma antecipação negativa em uma expressão regular para corresponder a um número que não é seguido pela palavra “pés”:
using System.Text.RegularExpressions;
using static System.Console;
var text = "1 shark is 5 feet long";
var pattern = @"\d+(?!\s*feet)";
var matches = Regex.Matches(text, pattern);
foreach (var match in matches)
{
WriteLine(match);
}
Linguagem de código: C# ( cs )
Saída:
1
Linguagem de código: C# ( cs )
Resumo
- Use lookahead negativo
A(?=B)
em expressões regulares para corresponder a A somente se ele for seguido por B. - Use lookahead negativo
A(?!B)
em expressões regulares para corresponder a A somente se ele não for seguido por B.