Resumo : neste tutorial, você aprenderá sobre grupos sem captura de regex e como usá-los para evitar sobrecarga desnecessária.
Introdução ao grupo Regex sem captura
Um grupo de captura corresponde a um padrão e armazena um resultado de correspondência em grupos correspondentes. Para criar um grupo de captura, você coloca um padrão entre parênteses ()
como este:
(P)
Linguagem de código: C# ( cs )
Nesta sintaxe, o mecanismo regex corresponde ao padrão P
e armazena o resultado da correspondência dentro de grupos, que você pode acessar através da Groups
propriedade do Match
objeto.
Em algumas situações, você deseja criar um grupo, mas não deseja capturar o resultado da partida. Para fazer isso, você usa um grupo sem captura com a seguinte sintaxe:
(?:P)
Linguagem de código: C# ( cs )
Quando você usa um grupo sem captura, o mecanismo regex corresponde ao padrão P
, mas não armazena o resultado da correspondência no arquivo Groups
.
Grupos sem captura são úteis quando você deseja criar um grupo e aplicar quantificadores , alternâncias ou outras operações a um grupo de padrões, mas não deseja capturá-los.
Grupos sem captura também ajudam você a escrever expressões regulares que evitam sobrecarga desnecessária do grupo de captura.
Exemplo de grupo Regex sem captura
O exemplo a seguir usa um grupo sem captura para corresponder a um código de cores no formato ou :"#
RRGGBB
""0x
RRGGBB
"
using System.Text.RegularExpressions;
using static System.Console;
var text = "My favorite color is #00FF00.";
var pattern = @"(?:#|0x)([A-Fa-f0-9]{6})";
var match = Regex.Match(text, pattern);
if (match.Success)
{
WriteLine($"Your favorite color code is {match.Groups[1].Value}");
}
Linguagem de código: C# ( cs )
Saída:
Your favorite color code is 00FF00
Linguagem de código: C# ( cs )
No padrão de expressão regular (?:#|0x)([A-Fa-f0-9]{6})
:
- O grupo sem captura
(?:#|0x)
corresponde ao#
símbolo “ ” ou ao0x
prefixo “”. - O grupo de captura
([A-Fa-f0-9]{6})
captura o código de cores real.
Resumo
- Use grupos sem captura para agrupar padrões sem capturar as substrings correspondentes.