Âncoras de expressões regulares
Âncoras ou declarações de largura zero atômicas, especificam uma posição na seqüência de caracteres onde uma correspondência deve ocorrer. Quando você usa uma âncora em sua expressão de pesquisa, o mecanismo de expressão regular não avance para a seqüência de caracteres ou consumir caracteres; ele procura uma correspondência na posição especificada. Por exemplo, ^ Especifica que a correspondência deve começar no início de uma linha ou uma seqüência de caracteres. Portanto, a expressão regular ^http: corresponde a "http:" somente quando ele ocorre no início de uma linha. A tabela a seguir lista as âncoras com suporte as expressões regulares na.NET Framework.
Âncora |
Descrição |
---|---|
^ |
A correspondência deve ocorrer no início de uma seqüência ou linha. Para obter mais informações, consulte início da seqüência ou linha. |
$ |
A correspondência deve ocorrer no final de uma seqüência ou linha, ou antes de \n no final da seqüência ou linha. Para obter mais informações, consulte final de seqüência ou linha de. |
\A |
A correspondência deve ocorrer no início da cadeia de caracteres somente (sem suporte a várias linhas). Para obter mais informações, consulte Iniciar somente da seqüência de caracteres. |
\Z |
A correspondência deve ocorrer no final da seqüência de caracteres, ou antes de \n no final da seqüência de caracteres. Para obter mais informações, consulte End of String ou antes de encerrar Newline. |
\z |
A correspondência deve ocorrer no final da seqüência de caracteres somente. Para obter mais informações, consulte Final de seqüência de caracteres somente. |
\G |
A correspondência deve começar na posição onde a ocorrência anterior foi encerrada. Para obter mais informações, consulte Correspondências contígua. |
\b |
A correspondência deve ocorrer em um limite de palavra. Para obter mais informações, consulte Limite de palavra. |
\B |
A correspondência não deve ocorrer em um limite de palavra. Para obter mais informações, consulte Limite de palavra Non. |
Início de uma seqüência ou linha: ^
O ^ âncora Especifica que o seguinte padrão deve começar na posição do primeira caractere da seqüência de caracteres. Se você usar ^ com o RegexOptions.Multiline opção (consulte Opções de expressão Regular), a correspondência deve ocorrer no início de cada linha.
O exemplo a seguir usa a ^ âncora em uma expressão regular que extrai informações sobre os anos durante os quais algumas equipes de profissionais de beisebol existiram. O exemplo chama duas sobrecargas da Regex.Matches() método:
A chamada para o Matches(String, String) sobrecarga localiza a primeira substring na seqüência de entrada que coincide com o padrão de expressão regular.
A chamada para o Matches(String, String, RegexOptions) de sobrecarga com o options parâmetro definido como RegexOptions.Multiline localiza todos os cinco substrings.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim startPos As Integer = 0
Dim endPos As Integer = 70
Dim input As String = "Brooklyn Dodgers, National League, 1911, 1912, 1932-1957" + vbCrLf + _
"Chicago Cubs, National League, 1903-present" + vbCrLf + _
"Detroit Tigers, American League, 1901-present" + vbCrLf + _
"New York Giants, National League, 1885-1957" + vbCrLf + _
"Washington Senators, American League, 1901-1960" + vbCrLf
Dim pattern As String = "^((\w+(\s*)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))*,*)+"
Dim match As Match
' Provide minimal validation in the event the input is invalid.
If input.Substring(startPos, endPos).Contains(",") Then
match = Regex.Match(input, pattern)
Do While match.Success
Console.Write("The {0} played in the {1} in", _
match.Groups(1).Value, match.Groups(4).Value)
For Each capture As Capture In match.Groups(5).Captures
Console.Write(capture.Value)
Next
Console.WriteLine(".")
startPos = match.Index + match.Length
endPos = CInt(IIf(startPos + 70 <= input.Length, 70, input.Length - startPos))
If Not input.Substring(startPos, endPos).Contains(",") Then Exit Do
match = match.NextMatch()
Loop
Console.WriteLine()
End If
startPos = 0
endPos = 70
If input.Substring(startPos, endPos).Contains(",") Then
match = Regex.Match(input, pattern, RegexOptions.Multiline)
Do While match.Success
Console.Write("The {0} played in the {1} in", _
match.Groups(1).Value, match.Groups(4).Value)
For Each capture As Capture In match.Groups(5).Captures
Console.Write(capture.Value)
Next
Console.WriteLine(".")
startPos = match.Index + match.Length
endPos = CInt(IIf(startPos + 70 <= input.Length, 70, input.Length - startPos))
If Not input.Substring(startPos, endPos).Contains(",") Then Exit Do
match = match.NextMatch()
Loop
Console.WriteLine()
End If
' For Each match As Match in Regex.Matches(input, pattern, RegexOptions.Multiline)
' Console.Write("The {0} played in the {1} in", _
' match.Groups(1).Value, match.Groups(4).Value)
' For Each capture As Capture In match.Groups(5).Captures
' Console.Write(capture.Value)
' Next
' Console.WriteLine(".")
' Next
End Sub
End Module
' The example displays the following output:
' The Brooklyn Dodgers played in the National League in 1911, 1912, 1932-1957.
'
' The Brooklyn Dodgers played in the National League in 1911, 1912, 1932-1957.
' The Chicago Cubs played in the National League in 1903-present.
' The Detroit Tigers played in the American League in 1901-present.
' The New York Giants played in the National League in 1885-1957.
' The Washington Senators played in the American League in 1901-1960.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
int startPos = 0, endPos = 70;
string input = "Brooklyn Dodgers, National League, 1911, 1912, 1932-1957\n" +
"Chicago Cubs, National League, 1903-present\n" +
"Detroit Tigers, American League, 1901-present\n" +
"New York Giants, National League, 1885-1957\n" +
"Washington Senators, American League, 1901-1960\n";
string pattern = @"^((\w+(\s*)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))*,*)+";
Match match;
if (input.Substring(startPos, endPos).Contains(",")) {
match = Regex.Match(input, pattern);
while (match.Success) {
Console.Write("The {0} played in the {1} in",
match.Groups[1].Value, match.Groups[4].Value);
foreach (Capture capture in match.Groups[5].Captures)
Console.Write(capture.Value);
Console.WriteLine(".");
startPos = match.Index + match.Length;
endPos = startPos + 70 <= input.Length ? 70 : input.Length - startPos;
if (! input.Substring(startPos, endPos).Contains(",")) break;
match = match.NextMatch();
}
Console.WriteLine();
}
if (input.Substring(startPos, endPos).Contains(",")) {
match = Regex.Match(input, pattern, RegexOptions.Multiline);
while (match.Success) {
Console.Write("The {0} played in the {1} in",
match.Groups[1].Value, match.Groups[4].Value);
foreach (Capture capture in match.Groups[5].Captures)
Console.Write(capture.Value);
Console.WriteLine(".");
startPos = match.Index + match.Length;
endPos = startPos + 70 <= input.Length ? 70 : input.Length - startPos;
if (! input.Substring(startPos, endPos).Contains(",")) break;
match = match.NextMatch();
}
Console.WriteLine();
}
}
}
// The example displays the following output:
// The Brooklyn Dodgers played in the National League in 1911, 1912, 1932-1957.
//
// The Brooklyn Dodgers played in the National League in 1911, 1912, 1932-1957.
// The Chicago Cubs played in the National League in 1903-present.
// The Detroit Tigers played in the American League in 1901-present.
// The New York Giants played in the National League in 1885-1957.
// The Washington Senators played in the American League in 1901-1960.
O padrão de expressão regular ^((\w+(\s*)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))*,*)+ é definido como mostrado na tabela a seguir.
Padrão |
Descrição |
---|---|
^ |
Começar a correspondência no início da seqüência de entrada (ou o início da linha, se o método é chamado com o RegexOptions.Multiline opção). |
((\w+(\s*)){2,} |
Corresponde a um ou mais caracteres do word, seguidos por zero ou por um espaço exatamente duas vezes. Este é o primeiro grupo de capturando. Essa expressão também define um segundo e terceiro grupo de captura: A segunda consiste na palavra capturada e a terceira consiste em espaços capturados. |
,\s |
Coincide com uma vírgula, seguida por um caractere de espaço em branco. |
(\w+\s\w+) |
Corresponde a um ou mais caracteres do word, seguidos por um espaço, seguido por um ou mais caracteres do word. Este é o quarto grupo de capturando. |
, |
Coincide com uma vírgula. |
\s\d{4} |
Corresponde a um espaço seguido de quatro dígitos decimais. |
(-(\d{4}|present))* |
Corresponde a zero ou uma de ocorrência de um hífen seguido de quatro dígitos decimais ou a seqüência de caracteres "presente". Este é o sexto grupo de captura. Ele também inclui um sétimo grupo de captura. |
,* |
Corresponde a zero ou uma de ocorrência de uma vírgula. |
(\s\d{4}(-(\d{4}|present))*,*)+ |
Correspondência de ocorrências de um ou mais dos seguintes procedimentos: um espaço, quatro dígitos decimais, zero ou uma de ocorrência de um hífen seguido de quatro dígitos decimais ou a seqüência de caracteres "presente" e zero ou um de vírgula. Este é o quinto grupo de captura. |
Voltar ao topo
Fim da seqüência ou linha: $
O $ âncora Especifica que o padrão anterior deve ocorrer no final da cadeia de entrada, ou antes de \n no final da seqüência de caracteres de entrada.
Se você usar $ com o RegexOptions.Multiline opção, a correspondência também pode ocorrer no final da linha. Observe que $ corresponde a \n , mas não corresponde ao \r\n (a combinação de caracteres de nova linha e de retorno de carro ou CR/LF). Para coincidir com a combinação de caracteres CR/LF, inclua \r?$ no padrão de expressão regular.
O exemplo a seguir adiciona o $ âncora para o padrão de expressão regular usada no exemplo de Iniciar de seqüência ou linha de seção. Quando usado com a seqüência de entrada original, que inclui cinco linhas de texto, o Regex.Matches(String, String) método é não é possível localizar uma correspondência, pois o final da primeira linha não corresponde a $ padrão. Quando a seqüência de caracteres de entrada original é dividida em uma matriz de cadeia de caracteres, o Regex.Matches(String, String) método for bem-sucedido na correspondência de cada uma das cinco linhas. Quando o Regex.Matches(String, String, RegexOptions) método é chamado com o options parâmetro definido como RegexOptions.Multiline, nenhuma correspondência for encontrada, porque o padrão de expressão regular não conta para o elemento de retorno de carro (\u+000D). No entanto, quando o padrão de expressão regular é modificado, substituindo $ com \r?$, chamada a Regex.Matches(String, String, RegexOptions) método com o options parâmetro definido como RegexOptions.Multiline novamente encontra cinco correspondências.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim startPos As Integer = 0
Dim endPos As Integer = 70
Dim input As String = "Brooklyn Dodgers, National League, 1911, 1912, 1932-1957" + vbCrLf + _
"Chicago Cubs, National League, 1903-present" + vbCrLf + _
"Detroit Tigers, American League, 1901-present" + vbCrLf + _
"New York Giants, National League, 1885-1957" + vbCrLf + _
"Washington Senators, American League, 1901-1960" + vbCrLf
Dim basePattern As String = "^((\w+(\s*)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))*,*)+"
Dim match As Match
Dim pattern As String = basePattern + "$"
Console.WriteLine("Attempting to match the entire input string:")
' Provide minimal validation in the event the input is invalid.
If input.Substring(startPos, endPos).Contains(",") Then
match = Regex.Match(input, pattern)
Do While match.Success
Console.Write("The {0} played in the {1} in", _
match.Groups(1).Value, match.Groups(4).Value)
For Each capture As Capture In match.Groups(5).Captures
Console.Write(capture.Value)
Next
Console.WriteLine(".")
startPos = match.Index + match.Length
endPos = CInt(IIf(startPos + 70 <= input.Length, 70, input.Length - startPos))
If Not input.Substring(startPos, endPos).Contains(",") Then Exit Do
match = match.NextMatch()
Loop
Console.WriteLine()
End If
Dim teams() As String = input.Split(New String() { vbCrLf }, StringSplitOptions.RemoveEmptyEntries)
Console.WriteLine("Attempting to match each element in a string array:")
For Each team As String In teams
If team.Length > 70 Then Continue For
match = Regex.Match(team, pattern)
If match.Success Then
Console.Write("The {0} played in the {1} in", _
match.Groups(1).Value, match.Groups(4).Value)
For Each capture As Capture In match.Groups(5).Captures
Console.Write(capture.Value)
Next
Console.WriteLine(".")
End If
Next
Console.WriteLine()
startPos = 0
endPos = 70
Console.WriteLine("Attempting to match each line of an input string with '$':")
' Provide minimal validation in the event the input is invalid.
If input.Substring(startPos, endPos).Contains(",") Then
match = Regex.Match(input, pattern, RegexOptions.Multiline)
Do While match.Success
Console.Write("The {0} played in the {1} in", _
match.Groups(1).Value, match.Groups(4).Value)
For Each capture As Capture In match.Groups(5).Captures
Console.Write(capture.Value)
Next
Console.WriteLine(".")
startPos = match.Index + match.Length
endPos = CInt(IIf(startPos + 70 <= input.Length, 70, input.Length - startPos))
If Not input.Substring(startPos, endPos).Contains(",") Then Exit Do
match = match.NextMatch()
Loop
Console.WriteLine()
End If
startPos = 0
endPos = 70
pattern = basePattern + "\r?$"
Console.WriteLine("Attempting to match each line of an input string with '\r?$':")
' Provide minimal validation in the event the input is invalid.
If input.Substring(startPos, endPos).Contains(",") Then
match = Regex.Match(input, pattern, RegexOptions.Multiline)
Do While match.Success
Console.Write("The {0} played in the {1} in", _
match.Groups(1).Value, match.Groups(4).Value)
For Each capture As Capture In match.Groups(5).Captures
Console.Write(capture.Value)
Next
Console.WriteLine(".")
startPos = match.Index + match.Length
endPos = CInt(IIf(startPos + 70 <= input.Length, 70, input.Length - startPos))
If Not input.Substring(startPos, endPos).Contains(",") Then Exit Do
match = match.NextMatch()
Loop
Console.WriteLine()
End If
End Sub
End Module
' The example displays the following output:
' Attempting to match the entire input string:
'
' Attempting to match each element in a string array:
' The Brooklyn Dodgers played in the National League in 1911, 1912, 1932-1957.
' The Chicago Cubs played in the National League in 1903-present.
' The Detroit Tigers played in the American League in 1901-present.
' The New York Giants played in the National League in 1885-1957.
' The Washington Senators played in the American League in 1901-1960.
'
' Attempting to match each line of an input string with '$':
'
' Attempting to match each line of an input string with '\r+$':
' The Brooklyn Dodgers played in the National League in 1911, 1912, 1932-1957.
' The Chicago Cubs played in the National League in 1903-present.
' The Detroit Tigers played in the American League in 1901-present.
' The New York Giants played in the National League in 1885-1957.
' The Washington Senators played in the American League in 1901-1960.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
int startPos = 0, endPos = 70;
string cr = Environment.NewLine;
string input = "Brooklyn Dodgers, National League, 1911, 1912, 1932-1957" + cr +
"Chicago Cubs, National League, 1903-present" + cr +
"Detroit Tigers, American League, 1901-present" + cr +
"New York Giants, National League, 1885-1957" + cr +
"Washington Senators, American League, 1901-1960" + cr;
Match match;
string basePattern = @"^((\w+(\s*)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))*,*)+";
string pattern = basePattern + "$";
Console.WriteLine("Attempting to match the entire input string:");
if (input.Substring(startPos, endPos).Contains(",")) {
match = Regex.Match(input, pattern);
while (match.Success) {
Console.Write("The {0} played in the {1} in",
match.Groups[1].Value, match.Groups[4].Value);
foreach (Capture capture in match.Groups[5].Captures)
Console.Write(capture.Value);
Console.WriteLine(".");
startPos = match.Index + match.Length;
endPos = startPos + 70 <= input.Length ? 70 : input.Length - startPos;
if (! input.Substring(startPos, endPos).Contains(",")) break;
match = match.NextMatch();
}
Console.WriteLine();
}
string[] teams = input.Split(new String[] { cr }, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine("Attempting to match each element in a string array:");
foreach (string team in teams)
{
if (team.Length > 70) continue;
match = Regex.Match(team, pattern);
if (match.Success)
{
Console.Write("The {0} played in the {1} in",
match.Groups[1].Value, match.Groups[4].Value);
foreach (Capture capture in match.Groups[5].Captures)
Console.Write(capture.Value);
Console.WriteLine(".");
}
}
Console.WriteLine();
startPos = 0;
endPos = 70;
Console.WriteLine("Attempting to match each line of an input string with '$':");
if (input.Substring(startPos, endPos).Contains(",")) {
match = Regex.Match(input, pattern, RegexOptions.Multiline);
while (match.Success) {
Console.Write("The {0} played in the {1} in",
match.Groups[1].Value, match.Groups[4].Value);
foreach (Capture capture in match.Groups[5].Captures)
Console.Write(capture.Value);
Console.WriteLine(".");
startPos = match.Index + match.Length;
endPos = startPos + 70 <= input.Length ? 70 : input.Length - startPos;
if (! input.Substring(startPos, endPos).Contains(",")) break;
match = match.NextMatch();
}
Console.WriteLine();
}
startPos = 0;
endPos = 70;
pattern = basePattern + "\r?$";
Console.WriteLine(@"Attempting to match each line of an input string with '\r?$':");
if (input.Substring(startPos, endPos).Contains(",")) {
match = Regex.Match(input, pattern, RegexOptions.Multiline);
while (match.Success) {
Console.Write("The {0} played in the {1} in",
match.Groups[1].Value, match.Groups[4].Value);
foreach (Capture capture in match.Groups[5].Captures)
Console.Write(capture.Value);
Console.WriteLine(".");
startPos = match.Index + match.Length;
endPos = startPos + 70 <= input.Length ? 70 : input.Length - startPos;
if (! input.Substring(startPos, endPos).Contains(",")) break;
match = match.NextMatch();
}
Console.WriteLine();
}
}
}
// The example displays the following output:
// Attempting to match the entire input string:
//
// Attempting to match each element in a string array:
// The Brooklyn Dodgers played in the National League in 1911, 1912, 1932-1957.
// The Chicago Cubs played in the National League in 1903-present.
// The Detroit Tigers played in the American League in 1901-present.
// The New York Giants played in the National League in 1885-1957.
// The Washington Senators played in the American League in 1901-1960.
//
// Attempting to match each line of an input string with '$':
//
// Attempting to match each line of an input string with '\r+$':
// The Brooklyn Dodgers played in the National League in 1911, 1912, 1932-1957.
// The Chicago Cubs played in the National League in 1903-present.
// The Detroit Tigers played in the American League in 1901-present.
// The New York Giants played in the National League in 1885-1957.
// The Washington Senators played in the American League in 1901-1960.
Voltar ao topo
Início da seqüência de caracteres somente: \A
O \A âncora Especifica que uma correspondência deve ocorrer no início da cadeia de caracteres de entrada. É idêntico do ^ âncora, exceto que \A ignora a RegexOptions.Multiline opção. Portanto, ele pode corresponder somente o início da primeira linha em uma seqüência de entrada de várias linhas.
O exemplo a seguir é semelhante aos exemplos para o ^ e $ âncoras. Ele usa o \A âncora em uma expressão regular que extrai informações sobre os anos durante os quais algumas equipes de profissionais de beisebol existiram. A seqüência de caracteres de entrada inclui cinco linhas. A chamada para o Regex.Matches(String, String, RegexOptions) método localiza a primeira substring na seqüência de entrada que coincide com o padrão de expressão regular. Como mostra o exemplo, o Multiline opção não terá nenhum efeito.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim startPos As Integer = 0
Dim endPos As Integer = 70
Dim input As String = "Brooklyn Dodgers, National League, 1911, 1912, 1932-1957" + vbCrLf + _
"Chicago Cubs, National League, 1903-present" + vbCrLf + _
"Detroit Tigers, American League, 1901-present" + vbCrLf + _
"New York Giants, National League, 1885-1957" + vbCrLf + _
"Washington Senators, American League, 1901-1960" + vbCrLf
Dim pattern As String = "\A((\w+(\s*)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))*,*)+"
Dim match As Match
' Provide minimal validation in the event the input is invalid.
If input.Substring(startPos, endPos).Contains(",") Then
match = Regex.Match(input, pattern, RegexOptions.Multiline)
Do While match.Success
Console.Write("The {0} played in the {1} in", _
match.Groups(1).Value, match.Groups(4).Value)
For Each capture As Capture In match.Groups(5).Captures
Console.Write(capture.Value)
Next
Console.WriteLine(".")
startPos = match.Index + match.Length
endPos = CInt(IIf(startPos + 70 <= input.Length, 70, input.Length - startPos))
If Not input.Substring(startPos, endPos).Contains(",") Then Exit Do
match = match.NextMatch()
Loop
Console.WriteLine()
End If
End Sub
End Module
' The example displays the following output:
' The Brooklyn Dodgers played in the National League in 1911, 1912, 1932-1957.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
int startPos = 0, endPos = 70;
string input = "Brooklyn Dodgers, National League, 1911, 1912, 1932-1957\n" +
"Chicago Cubs, National League, 1903-present\n" +
"Detroit Tigers, American League, 1901-present\n" +
"New York Giants, National League, 1885-1957\n" +
"Washington Senators, American League, 1901-1960\n";
string pattern = @"\A((\w+(\s*)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))*,*)+";
Match match;
if (input.Substring(startPos, endPos).Contains(",")) {
match = Regex.Match(input, pattern, RegexOptions.Multiline);
while (match.Success) {
Console.Write("The {0} played in the {1} in",
match.Groups[1].Value, match.Groups[4].Value);
foreach (Capture capture in match.Groups[5].Captures)
Console.Write(capture.Value);
Console.WriteLine(".");
startPos = match.Index + match.Length;
endPos = startPos + 70 <= input.Length ? 70 : input.Length - startPos;
if (! input.Substring(startPos, endPos).Contains(",")) break;
match = match.NextMatch();
}
Console.WriteLine();
}
}
}
// The example displays the following output:
// The Brooklyn Dodgers played in the National League in 1911, 1912, 1932-1957.
Voltar ao topo
Final da seqüência de caracteres ou antes de encerrar a nova linha: \Z
O \Z âncora Especifica que uma correspondência deve ocorrer no final da cadeia de entrada, ou antes de \n no final da seqüência de caracteres de entrada. É idêntico do $ âncora, exceto que \Z ignora a RegexOptions.Multiline opção. Portanto, em uma seqüência de várias linhas, ele pode corresponder apenas final da última linha ou a última linha antes de \n.
Observe que \Z corresponde a \n , mas não corresponde ao \r\n (a combinação do caractere de CR/LF). Para corresponder a CR/LF, inclua \r?\Z no padrão de expressão regular.
O exemplo a seguir usa a \Z âncora em uma expressão regular que é semelhante ao exemplo a Iniciar de seqüência ou linha de seção, que extrai informações sobre os anos durante os quais algumas equipes de profissionais de beisebol existiram. A subexpressão \r?\Z na expressão regular ^((\w+(\s*)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))*,*)+\r?\Z corresponde ao final de uma seqüência de caracteres e também corresponde a uma seqüência de caracteres que termina com \n ou \r\n. Como resultado, cada elemento da matriz corresponde a padrão de expressão regular.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim inputs() As String = { "Brooklyn Dodgers, National League, 1911, 1912, 1932-1957", _
"Chicago Cubs, National League, 1903-present" + vbCrLf, _
"Detroit Tigers, American League, 1901-present" + vbLf, _
"New York Giants, National League, 1885-1957", _
"Washington Senators, American League, 1901-1960" + vbCrLf }
Dim pattern As String = "^((\w+(\s*)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))*,*)+\r?\Z"
For Each input As String In inputs
If input.Length > 70 Or Not input.Contains(",") Then Continue For
Console.WriteLine(Regex.Escape(input))
Dim match As Match = Regex.Match(input, pattern)
If match.Success Then
Console.WriteLine(" Match succeeded.")
Else
Console.WriteLine(" Match failed.")
End If
Next
End Sub
End Module
' The example displays the following output:
' Brooklyn\ Dodgers,\ National\ League,\ 1911,\ 1912,\ 1932-1957
' Match succeeded.
' Chicago\ Cubs,\ National\ League,\ 1903-present\r\n
' Match succeeded.
' Detroit\ Tigers,\ American\ League,\ 1901-present\n
' Match succeeded.
' New\ York\ Giants,\ National\ League,\ 1885-1957
' Match succeeded.
' Washington\ Senators,\ American\ League,\ 1901-1960\r\n
' Match succeeded.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string[] inputs = { "Brooklyn Dodgers, National League, 1911, 1912, 1932-1957",
"Chicago Cubs, National League, 1903-present" + Environment.NewLine,
"Detroit Tigers, American League, 1901-present" + Regex.Unescape(@"\n"),
"New York Giants, National League, 1885-1957",
"Washington Senators, American League, 1901-1960" + Environment.NewLine};
string pattern = @"^((\w+(\s*)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))*,*)+\r?\Z";
foreach (string input in inputs)
{
if (input.Length > 70 || ! input.Contains(",")) continue;
Console.WriteLine(Regex.Escape(input));
Match match = Regex.Match(input, pattern);
if (match.Success)
Console.WriteLine(" Match succeeded.");
else
Console.WriteLine(" Match failed.");
}
}
}
// The example displays the following output:
// Brooklyn\ Dodgers,\ National\ League,\ 1911,\ 1912,\ 1932-1957
// Match succeeded.
// Chicago\ Cubs,\ National\ League,\ 1903-present\r\n
// Match succeeded.
// Detroit\ Tigers,\ American\ League,\ 1901-present\n
// Match succeeded.
// New\ York\ Giants,\ National\ League,\ 1885-1957
// Match succeeded.
// Washington\ Senators,\ American\ League,\ 1901-1960\r\n
// Match succeeded.
Voltar ao topo
Fim da seqüência de caracteres somente: \z
O \z âncora Especifica que uma correspondência deve ocorrer no final da seqüência de caracteres de entrada. Como o $ o elemento de linguagem, \z ignora a RegexOptions.Multiline opção. Diferentemente do \Z elemento de linguagem, \z não coincide com um \n caractere no final de uma seqüência de caracteres. Portanto, ele pode corresponder apenas a última linha da seqüência de entrada.
O exemplo a seguir usa a \z âncora em uma expressão regular, caso contrário é idêntica do exemplo na seção anterior, que extrai informações sobre os anos durante os quais algumas equipes de profissionais de beisebol existiram. O exemplo tenta corresponder a cada um dos cinco elementos em uma matriz de cadeia de caracteres com o padrão de expressão regular ^((\w+(\s*)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))*,*)+\r?\z. Dois de final de seqüências de caracteres com carro de retornam e caracteres de avanço de linha, um termina com um caractere, de alimentação de linha e dois final com um carro nem retornar nem caractere de avanço de uma linha. Como mostra a saída, as seqüências de caracteres sem um carro de retorno ou alimentação de linha a correspondência de caracteres padrão.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim inputs() As String = { "Brooklyn Dodgers, National League, 1911, 1912, 1932-1957", _
"Chicago Cubs, National League, 1903-present" + vbCrLf, _
"Detroit Tigers, American League, 1901-present" + vbLf, _
"New York Giants, National League, 1885-1957", _
"Washington Senators, American League, 1901-1960" + vbCrLf }
Dim pattern As String = "^((\w+(\s*)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))*,*)+\r?\z"
For Each input As String In inputs
If input.Length > 70 Or Not input.Contains(",") Then Continue For
Console.WriteLine(Regex.Escape(input))
Dim match As Match = Regex.Match(input, pattern)
If match.Success Then
Console.WriteLine(" Match succeeded.")
Else
Console.WriteLine(" Match failed.")
End If
Next
End Sub
End Module
' The example displays the following output:
' Brooklyn\ Dodgers,\ National\ League,\ 1911,\ 1912,\ 1932-1957
' Match succeeded.
' Chicago\ Cubs,\ National\ League,\ 1903-present\r\n
' Match failed.
' Detroit\ Tigers,\ American\ League,\ 1901-present\n
' Match failed.
' New\ York\ Giants,\ National\ League,\ 1885-1957
' Match succeeded.
' Washington\ Senators,\ American\ League,\ 1901-1960\r\n
' Match failed.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string[] inputs = { "Brooklyn Dodgers, National League, 1911, 1912, 1932-1957",
"Chicago Cubs, National League, 1903-present" + Environment.NewLine,
"Detroit Tigers, American League, 1901-present\\r",
"New York Giants, National League, 1885-1957",
"Washington Senators, American League, 1901-1960" + Environment.NewLine };
string pattern = @"^((\w+(\s*)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))*,*)+\r?\z";
foreach (string input in inputs)
{
if (input.Length > 70 || ! input.Contains(",")) continue;
Console.WriteLine(Regex.Escape(input));
Match match = Regex.Match(input, pattern);
if (match.Success)
Console.WriteLine(" Match succeeded.");
else
Console.WriteLine(" Match failed.");
}
}
}
// The example displays the following output:
// Brooklyn\ Dodgers,\ National\ League,\ 1911,\ 1912,\ 1932-1957
// Match succeeded.
// Chicago\ Cubs,\ National\ League,\ 1903-present\r\n
// Match failed.
// Detroit\ Tigers,\ American\ League,\ 1901-present\n
// Match failed.
// New\ York\ Giants,\ National\ League,\ 1885-1957
// Match succeeded.
// Washington\ Senators,\ American\ League,\ 1901-1960\r\n
// Match failed.
Voltar ao topo
Correspondências contíguas: \G
O \G âncora Especifica que uma correspondência deve ocorrer no ponto onde a ocorrência anterior foi encerrada. Quando você usa essa âncora com a Regex.Matches ou Match.NextMatch método, ele garante que todas as correspondências são contíguas.
O exemplo a seguir usa uma expressão regular para extrair os nomes de espécies de roedoras de uma string delimitada por ponto-e-vírgula.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim input As String = "capybara,squirrel,chipmunk,porcupine,gopher," + _
"beaver,groundhog,hamster,guinea pig,gerbil," + _
"chinchilla,prairie dog,mouse,rat"
Dim pattern As String = "\G(\w+\s?\w*),?"
Dim match As Match = Regex.Match(input, pattern)
Do While match.Success
Console.WriteLine(match.Groups(1).Value)
match = match.NextMatch()
Loop
End Sub
End Module
' The example displays the following output:
' capybara
' squirrel
' chipmunk
' porcupine
' gopher
' beaver
' groundhog
' hamster
' guinea pig
' gerbil
' chinchilla
' prairie dog
' mouse
' rat
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string input = "capybara,squirrel,chipmunk,porcupine,gopher," +
"beaver,groundhog,hamster,guinea pig,gerbil," +
"chinchilla,prairie dog,mouse,rat";
string pattern = @"\G(\w+\s?\w*),?";
Match match = Regex.Match(input, pattern);
while (match.Success)
{
Console.WriteLine(match.Groups[1].Value);
match = match.NextMatch();
}
}
}
// The example displays the following output:
// capybara
// squirrel
// chipmunk
// porcupine
// gopher
// beaver
// groundhog
// hamster
// guinea pig
// gerbil
// chinchilla
// prairie dog
// mouse
// rat
A expressão regular \G(\w+\s?\w*),? é interpretado como mostrado na tabela a seguir.
Padrão |
Descrição |
---|---|
\G |
Comece onde a última correspondência foi encerrado. |
\w+ |
Corresponde a um ou mais caracteres do word. |
\s? |
Corresponde a zero ou um espaço. |
\w* |
Corresponde a zero ou mais caracteres do word. |
(\w+\s? \w*) |
Corresponde a um ou mais caracteres do word, seguidos de zero ou um de espaço, seguido de zero ou mais caracteres do word. Este é o primeiro grupo de capturando. |
,? |
Corresponde a zero ou uma de ocorrência de um caractere de vírgula literal. |
Voltar ao topo
Limite de palavra: \b
O \b âncora Especifica que a correspondência deve ocorrer em um limite entre um caractere de palavra (o \w elemento de linguagem) e não-alfabético (a \W o elemento de linguagem). Caracteres alfabéticos consistem em caracteres alfanuméricos e sublinhados; não-alfabético é qualquer caractere que não seja alfanumérico ou um sublinhado. (Para obter mais informações, consulte Classes de Caracteres.) A correspondência também pode ocorrer em um limite de palavra no início ou fim da string.
O \b âncora é freqüentemente usada para garantir que uma subexpressão corresponde a uma palavra inteira em vez de apenas o início ou final de uma palavra. A expressão regular \bare\w*\b no exemplo a seguir ilustra o uso. Corresponde a qualquer palavra que comece com a subseqüência "são". A saída do exemplo também ilustra que \b coincide com o início e o final da seqüência de caracteres de entrada.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim input As String = "area bare arena mare"
Dim pattern As String = "\bare\w*\b"
Console.WriteLine("Words that begin with 'are':")
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine("'{0}' found at position {1}", _
match.Value, match.Index)
Next
End Sub
End Module
' The example displays the following output:
' Words that begin with 'are':
' 'area' found at position 0
' 'arena' found at position 10
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string input = "area bare arena mare";
string pattern = @"\bare\w*\b";
Console.WriteLine("Words that begin with 'are':");
foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine("'{0}' found at position {1}",
match.Value, match.Index);
}
}
// The example displays the following output:
// Words that begin with 'are':
// 'area' found at position 0
// 'arena' found at position 10
O padrão de expressão regular é interpretado como mostrado na tabela a seguir.
Padrão |
Descrição |
---|---|
\b |
Começa a correspondência de um limite de palavra. |
are |
Corresponde a subseqüência "são". |
\w* |
Corresponde a zero ou mais caracteres do word. |
\b |
Finalize a correspondência de um limite de palavra. |
Voltar ao topo
Limite de palavra não: \B
O \B âncora Especifica que a correspondência não deve ocorrer em um limite de palavra. É o oposto da \b âncora.
O exemplo a seguir usa a \B a âncora para localizar as ocorrências da subseqüência "qu" em uma palavra. O padrão de expressão regular \Bqu\w+ corresponde a uma subseqüência que começa com "qu" que não inicia uma palavra e que continua até o final da palavra.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim input As String = "equity queen equip acquaint quiet"
Dim pattern As String = "\Bqu\w+"
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine("'{0}' found at position {1}", _
match.Value, match.Index)
Next
End Sub
End Module
' The example displays the following output:
' 'quity' found at position 1
' 'quip' found at position 14
' 'quaint' found at position 21
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string input = "equity queen equip acquaint quiet";
string pattern = @"\Bqu\w+";
foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine("'{0}' found at position {1}",
match.Value, match.Index);
}
}
// The example displays the following output:
// 'quity' found at position 1
// 'quip' found at position 14
// 'quaint' found at position 21
O padrão de expressão regular é interpretado como mostrado na tabela a seguir.
Padrão |
Descrição |
---|---|
\B |
Não comece a correspondência de um limite de palavra. |
qu |
Corresponde a subseqüência "qu". |
\w+ |
Corresponde a um ou mais caracteres do word. |
Voltar ao topo
Consulte também
Referência
Opções de expressões regulares