Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Gli ancoraggi o le asserzioni atomiche a larghezza zero specificano una posizione nella stringa in cui deve verificarsi una corrispondenza. Quando si usa un ancoraggio nell'espressione di ricerca, il motore delle espressioni regolari non passa attraverso la stringa o utilizza caratteri; cerca solo una corrispondenza nella posizione specificata. Ad esempio, ^ specifica che il match deve iniziare all'inizio di una riga o di una stringa. Pertanto, l'espressione ^http: regolare corrisponde a "http:" solo quando si verifica all'inizio di una riga. Nella tabella seguente sono elencati gli ancoraggi supportati dalle espressioni regolari in .NET.
| Ancora | Descrizione |
|---|---|
^ |
Per impostazione predefinita, la corrispondenza deve verificarsi all'inizio della stringa; in modalità multilinea, deve verificarsi all'inizio della riga. Per altre informazioni, vedere Inizio di stringa o riga. |
$ |
Per impostazione predefinita, la corrispondenza deve verificarsi alla fine della stringa o prima \n alla fine della stringa. In modalità multilinea deve verificarsi alla fine della riga o prima \n alla fine della riga. Per altre informazioni, vedere Fine di stringa o riga. |
\A |
La corrispondenza deve verificarsi solo all'inizio della stringa (nessun supporto su più righe). Per ulteriori informazioni, vedere Solo all'inizio della stringa. |
\Z |
La corrispondenza deve verificarsi alla fine della stringa o prima di \n alla fine della stringa. Per altre informazioni, vedere Fine della stringa o Prima di terminare la nuova riga. |
\z |
La corrispondenza deve verificarsi solo alla fine della stringa. Per altre informazioni, vedere Solo fine stringa. |
\G |
La corrispondenza deve iniziare dal punto in cui è terminata la corrispondenza precedente o, se non è stata trovata alcuna corrispondenza precedente, dal punto della stringa in cui è iniziata la corrispondenza. Per altre informazioni, vedere Corrispondenze contigue. |
\b |
La corrispondenza deve verificarsi su un limite di parola. Per altre informazioni, vedere Word Boundary. |
\B |
La corrispondenza non deve verificarsi su un limite di parola. Per ulteriori informazioni, vedere Limite Non-Parola. |
Inizio di stringa o riga: ^
Per impostazione predefinita, l'ancoraggio ^ specifica che il criterio seguente deve iniziare alla prima posizione del carattere della stringa. Se si usa ^ con l'opzione RegexOptions.Multiline (vedere Opzioni espressioni regolari), la corrispondenza deve verificarsi all'inizio di ogni riga.
L'esempio seguente usa l'ancora ^ in un'espressione regolare che estrae informazioni sugli anni in cui alcune squadre di baseball professionistiche sono esistite. L'esempio chiama due overload del metodo Regex.Matches.
La chiamata all'overload Matches(String, String) trova solo la prima sottostringa nella stringa di input che corrisponde al modello di espressione regolare.
Chiamata all'overload Matches(String, String, RegexOptions) con il parametro
optionsimpostato su RegexOptions.Multiline vengono trovate tutte e cinque le sottostringhe.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
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;
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(".");
match = match.NextMatch();
}
Console.WriteLine();
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(".");
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.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
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
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(".")
match = match.NextMatch()
Loop
Console.WriteLine()
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(".")
match = match.NextMatch()
Loop
Console.WriteLine()
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.
Il modello di espressione regolare ^((\w+(\s?)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))?,?)+ è definito come mostrato nella tabella seguente.
| Modello | Descrizione |
|---|---|
^ |
Iniziare la corrispondenza all'inizio della stringa di input o all'inizio della riga se il metodo viene chiamato con l'opzione RegexOptions.Multiline . |
((\w+(\s?)){2,} |
Trova la corrispondenza con uno o più caratteri di parola seguiti da zero o da uno spazio almeno due volte. Questo è il primo gruppo di cattura. Questa espressione definisce anche un secondo e terzo gruppo di acquisizione: il secondo è costituito dalla parola acquisita e il terzo è costituito dallo spazio vuoto acquisito. |
,\s |
Trova la corrispondenza con una virgola seguita da uno spazio vuoto. |
(\w+\s\w+) |
Trova la corrispondenza con uno o più caratteri di parola seguiti da uno spazio, seguito da uno o più caratteri di parola. Questo è il quarto gruppo di acquisizione. |
, |
Trova la corrispondenza con una virgola. |
\s\d{4} |
Trova la corrispondenza con uno spazio seguito da quattro cifre decimali. |
(-(\d{4}|present))? |
Trova la corrispondenza con zero o una occorrenza di un trattino seguito da quattro cifre decimali o dalla stringa "present". Questo è il sesto gruppo di acquisizione. Include anche un settimo gruppo di acquisizione. |
,? |
Trova la corrispondenza con zero o una occorrenza di una virgola. |
(\s\d{4}(-(\d{4}|present))?,?)+ |
Trova la corrispondenza con una o più occorrenze degli elementi seguenti: uno spazio, quattro cifre decimali, zero o una occorrenza di un trattino seguito da quattro cifre decimali o dalla stringa "present" e zero o una virgola. Questo è il quinto gruppo di acquisizione. |
Fine di stringa o riga: $
L'ancora $ specifica che il modello precedente deve apparire alla fine della stringa di input o subito prima di \n alla fine della stringa di input.
Se usi $ con l'opzione RegexOptions.Multiline, la corrispondenza può verificarsi anche alla fine di una riga. Si noti che è soddisfatto a $ ma non a \n (la combinazione di ritorno a capo e caratteri di nuova riga, ovvero CR/LF). Per gestire la combinazione di caratteri CR/LF, includere \r?$ nel pattern di espressione regolare. Si noti che \r?$ includerà qualsiasi elemento di \r nella corrispondenza.
A partire da .NET 11, è possibile usare RegexOptions.AnyNewLine per rendere $ riconoscere tutte le sequenze di nuova riga comuni anziché solo \n. A differenza della \r?$ soluzione alternativa, AnyNewLine considera \r\n come una sequenza atomica, quindi \r non è incluso nella corrispondenza. Per altre informazioni, vedere Modalità AnyNewLine.
Nell'esempio seguente viene aggiunto l'anchor $ al modello di espressione regolare usato nell'esempio nella sezione Start of String or Line. Se utilizzata con la stringa di input originale, che include cinque righe di testo, il Regex.Matches(String, String) metodo non riesce a trovare una corrispondenza, perché la fine della prima riga non corrisponde al $ criterio. Quando la stringa di input originale viene suddivisa in una matrice di stringhe, il Regex.Matches(String, String) metodo riesce a corrispondere a ognuna delle cinque righe. Quando il Regex.Matches(String, String, RegexOptions) metodo viene chiamato con il options parametro impostato su RegexOptions.Multiline, non si trovano corrispondenze perché il modello di espressione regolare non tiene conto del carattere \r di ritorno a capo. Tuttavia, quando il modello di espressione regolare viene modificato sostituendo $ con \r?$, chiamando il metodo Regex.Matches(String, String, RegexOptions) con il parametro options impostato su RegexOptions.Multiline trova nuovamente cinque corrispondenze.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
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:");
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(".");
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)
{
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();
Console.WriteLine("Attempting to match each line of an input string with '$':");
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(".");
match = match.NextMatch();
}
Console.WriteLine();
pattern = basePattern + "\r?$";
Console.WriteLine(@"Attempting to match each line of an input string with '\r?$':");
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(".");
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.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
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:")
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(".")
match = match.NextMatch()
Loop
Console.WriteLine()
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
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()
Console.WriteLine("Attempting to match each line of an input string with '$':")
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(".")
match = match.NextMatch()
Loop
Console.WriteLine()
pattern = basePattern + "\r?$"
Console.WriteLine("Attempting to match each line of an input string with '\r?$':")
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(".")
match = match.NextMatch()
Loop
Console.WriteLine()
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.
Solo inizio stringa: \A
L'ancoraggio \A specifica che deve verificarsi una corrispondenza all'inizio della stringa di input. È identico all'ancoraggio ^, tranne che \A ignora l'opzione RegexOptions.Multiline. Pertanto, può corrispondere solo all'inizio della prima riga in una stringa di input su più righe.
L'esempio seguente è simile agli esempi per le ancore ^ e $. Utilizza l'ancora \A in un'espressione regolare che estrae informazioni sugli anni durante i quali esistevano alcune squadre di baseball professionistiche. La stringa di input comprende cinque righe. La chiamata al Regex.Matches(String, String, RegexOptions) metodo trova solo la prima sottostringa nella stringa di input che corrisponde al criterio di espressione regolare. Come illustrato nell'esempio, l'opzione Multiline non ha alcun effetto.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
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 = 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(".");
match = match.NextMatch();
}
Console.WriteLine();
}
}
// The example displays the following output:
// The Brooklyn Dodgers played in the National League in 1911, 1912, 1932-1957.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
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 = 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(".")
match = match.NextMatch()
Loop
Console.WriteLine()
End Sub
End Module
' The example displays the following output:
' The Brooklyn Dodgers played in the National League in 1911, 1912, 1932-1957.
Fine della stringa o prima della fine della nuova riga: \Z
L'ancoraggio \Z specifica che deve verificarsi una corrispondenza alla fine della stringa di input o prima \n alla fine della stringa di input. È identico all'ancoraggio $, tranne che \Z ignora l'opzione RegexOptions.Multiline. Pertanto, in una stringa multilinea, può essere soddisfatta solo dalla fine dell'ultima riga oppure dall'ultima riga prima di \n.
Si noti che \Z è soddisfatto in \n, ma non è soddisfatto in \r\n (combinazione di caratteri CR/LF). Per considerare CR/LF come se fosse \n, includere \r?\Z nel modello di espressione regolare. Si noti che in questo modo il \r sarà considerato come parte della corrispondenza.
A partire da .NET 11, è possibile usare RegexOptions.AnyNewLine per rendere \Z riconoscere tutte le sequenze di nuova riga comuni anziché solo \n. A differenza della \r?\Z soluzione alternativa, AnyNewLine considera \r\n come una sequenza atomica, quindi \r non è incluso nella corrispondenza. Per altre informazioni, vedere Modalità AnyNewLine.
L'esempio seguente usa l'ancora \Z in un'espressione regolare simile all'esempio nella sezione Inizio della Stringa o della Linea, che estrae informazioni sugli anni durante i quali esistettero alcune squadre di baseball professionistiche. La sottoespressione \r?\Z nell'espressione ^((\w+(\s?)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))?,?)+\r?\Z regolare viene soddisfatta alla fine di una stringa e anche alla fine di una stringa che termina con \n o \r\n. Di conseguenza, ogni elemento nella matrice corrisponde al criterio di espressione regolare.
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)
{
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.
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
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.
Solo fine stringa: \z
L'ancoraggio \z specifica che deve verificarsi una corrispondenza alla fine della stringa di input. Analogamente all'elemento $ del linguaggio, \z ignora l'opzione RegexOptions.Multiline . A differenza dell'elemento \Z di linguaggio, \z non viene soddisfatto da un \n carattere alla fine di una stringa. Pertanto, può corrispondere solo alla fine della stringa di input.
L'esempio seguente utilizza l'ancoraggio \z in un'espressione regolare che è altrimenti identica all'esempio della sezione precedente, la quale estrae informazioni sugli anni durante i quali esistevano alcune squadre professionisti di baseball. Nell'esempio viene eseguito un tentativo di associare ognuno di cinque elementi in una matrice di stringhe con il criterio ^((\w+(\s?)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))?,?)+\r?\zdi espressione regolare . Due delle stringhe terminano con un ritorno a capo e un carattere di avanzamento di riga, una termina con un carattere di avanzamento di riga, e due terminano senza né un ritorno a capo né un carattere di avanzamento di riga. Come illustrato nell'output, solo le stringhe senza un ritorno a capo o un carattere di avanzamento riga corrispondono al modello.
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\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)
{
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.
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
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.
Corrispondenze contigue: \G
L'ancoraggio \G specifica che deve verificarsi una corrispondenza nel punto in cui è terminata la corrispondenza precedente o se non è stata trovata alcuna corrispondenza precedente, nella posizione nella stringa in cui è stata avviata la corrispondenza. Quando si utilizza questa ancora con il metodo Regex.Matches o Match.NextMatch, si garantisce che tutte le corrispondenze siano contigue.
Suggerimento
In genere, si posiziona un \G ancoraggio alla fine sinistra del modello. Nel caso insolito in cui si esegue una ricerca da destra a sinistra, posizionare l'ancoraggio \G alla fine destra del modello.
Nell'esempio seguente viene utilizzata un'espressione regolare per estrarre i nomi delle specie di roditori da una stringa delimitata da virgole.
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
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
L'espressione regolare \G(\w+\s?\w*),? viene interpretata come illustrato nella tabella seguente.
| Modello | Descrizione |
|---|---|
\G |
Inizia dove è terminata l'ultima corrispondenza. |
\w+ |
Trova la corrispondenza di uno o più caratteri di parola. |
\s? |
Trova la corrispondenza con zero o uno spazio. |
\w* |
Trova la corrispondenza di zero o più caratteri di parola. |
(\w+\s?\w*) |
Individua uno o più caratteri di parola seguiti da zero o uno spazio, seguiti da zero o più caratteri di parola. Questo è il primo gruppo di cattura. |
,? |
Trova la corrispondenza con zero o una occorrenza di un carattere letterale virgola. |
Confine di parola: \b
L'ancoraggio \b specifica che la corrispondenza deve verificarsi su un limite tra un carattere di parola (l'elemento \w della lingua) e un carattere non parola (l'elemento \W lingua). I caratteri parola sono costituiti da caratteri alfanumerici e trattini bassi; un carattere non di parola è qualsiasi carattere che non sia alfanumerico o un trattino basso. Per altre informazioni, vedere Classi di caratteri. La corrispondenza può verificarsi anche su un limite di parola all'inizio o alla fine della stringa.
L'ancoraggio \b viene spesso usato per garantire che una sottoespressione corrisponda a un'intera parola anziché solo all'inizio o alla fine di una parola. L'espressione \bare\w*\b regolare nell'esempio seguente illustra questo utilizzo. Corrisponde a qualsiasi parola che inizia con la sottostringa "are". L'output dell'esempio illustra anche che \b corrisponde sia all'inizio sia alla fine della stringa di input.
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($"'{match.Value}' found at position {match.Index}");
}
}
// The example displays the following output:
// Words that begin with 'are':
// 'area' found at position 0
// 'arena' found at position 10
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
Il modello di espressione regolare è interpretato come mostrato nella seguente tabella.
| Modello | Descrizione |
|---|---|
\b |
Inizia la corrispondenza al limite di una parola. |
are |
Trova la corrispondenza con la sottostringa "are". |
\w* |
Trova la corrispondenza di zero o più caratteri di parola. |
\b |
Termina la partita al confine di una parola. |
Confine non di parola: \B
L'ancoraggio \B specifica che la corrispondenza non deve verificarsi su un limite di parola. È l'opposto dell'ancoraggio \b .
Nell'esempio seguente viene usato l'ancoraggio \B per individuare le occorrenze della sottostringa "qu" in una parola. Il criterio \Bqu\w+ di espressione regolare corrisponde a una sottostringa che inizia con un "qu" che non inizia una parola e che continua fino alla fine della parola.
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($"'{match.Value}' found at position {match.Index}");
}
}
// The example displays the following output:
// 'quity' found at position 1
// 'quip' found at position 14
// 'quaint' found at position 21
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
Il modello di espressione regolare è interpretato come mostrato nella seguente tabella.
| Modello | Descrizione |
|---|---|
\B |
Non iniziare il confronto all'inizio di una parola. |
qu |
Trova la corrispondenza con la sottostringa "qu". |
\w+ |
Trova la corrispondenza di uno o più caratteri di parola. |