Metodo System.Text.RegularExpressions.Regex.Match
Questo articolo fornisce osservazioni supplementari alla documentazione di riferimento per questa API.
Il metodo Match(String, Int32) restituisce la prima sottostringa corrispondente a un criterio di espressione regolare, a partire o dopo la posizione del carattere startat
, in una stringa di input. Il modello di espressione regolare per cui il metodo Match(String, Int32) cerca è definito dalla chiamata a uno dei costruttori della classe Regex. Per informazioni sugli elementi del linguaggio usati per creare un criterio di espressione regolare, vedere Linguaggio di espressioni regolari - Riferimento rapido.
Parametro startat
Facoltativamente, è possibile specificare una posizione iniziale nella stringa usando il parametro startat
. Tutte le corrispondenze che iniziano prima di startat
nella stringa vengono ignorate. Se non si specifica una posizione iniziale, la ricerca inizia nella posizione predefinita, ovvero l'estremità sinistra di input
in una ricerca da sinistra a destra e l'estremità destra di input
in una ricerca da destra a sinistra. Anche se si parte da startat
, l'indice di ogni corrispondenza trovata è calcolato dal principio della stringa.
Sebbene il motore delle espressioni regolari non restituisca alcuna corrispondenza che inizia prima di startat
, non ignora comunque la stringa che precede startat
. Ciò significa che asserzioni come ancoraggi o asserzioni lookbehind si applicano ancora all'input nel suo complesso. Ad esempio, il codice seguente include un criterio con un'asserzione lookbehind soddisfatta anche se si verifica prima dell'indice startat
di 5 nella stringa di input.
using System;
using System.Text.RegularExpressions;
namespace Examples
{
public class Example3
{
public static void Main()
{
string input = "Zip code: 98052";
var regex = new Regex(@"(?<=Zip code: )\d{5}");
Match match = regex.Match(input, 5);
if (match.Success)
Console.WriteLine($"Match found: {match.Value}");
}
}
}
// This code prints the following output:
// Match found: 98052
Suggerimento
- Se un criterio inizia con l'ancoraggio
^
mastartat
è maggiore di 0, non si troverà mai alcuna corrispondenza in una ricerca su una singola linea, poiché è vincolata da^
a partire dall'indice 0. - L'ancoraggio
\G
è soddisfatto astartat
. Per questo motivo, se si desidera limitare una corrispondenza in modo che inizi esattamente in corrispondenza di una determinata posizione di carattere nella stringa, ancorare l'espressione regolare con un\G
a sinistra per un criterio da sinistra a destra. Ciò limita la corrispondenza in modo che inizi esattamente astartat
(o, quando si desiderano più corrispondenze, in modo che le corrispondenze siano consecutive).
Ricerche da destra a sinistra
Una ricerca da destra a sinistra, ovvero quando il criterio di espressione regolare viene costruito con l'opzione RegexOptions.RightToLeft, si comporta nei modi seguenti:
- L'analisi si sposta nella direzione opposta e il modello viene confrontato da indietro (a destra) verso il lato anteriore (sinistro).
- La posizione iniziale predefinita è la fine destra della stringa di input.
- Se si specifica
startat
, l'analisi da destra a sinistra inizia con il caratterestartat
- 1 (nonstartat
). - Quando l'ancoraggio
\G
viene specificato all'estremità destra di un modello, limita la prima corrispondenza affinché termini esattamente astartat
- 1.
Per altre informazioni sulle ricerche da destra a sinistra, vedere modalità da destra a sinistra.
Determinare se viene trovata una corrispondenza
È possibile determinare se il pattern di espressione regolare è stato trovato nella stringa di input controllando il valore della proprietà Success dell'oggetto Match restituito. Se viene trovata una corrispondenza, la proprietà Value dell'oggetto Match restituita contiene la sottostringa di input
che corrisponde al criterio di espressione regolare. Se non viene trovata alcuna corrispondenza, il relativo valore è String.Empty.
Prima o più corrispondenze
Questo metodo restituisce la prima sottostringa trovata in corrispondenza o dopo la posizione del carattere startat
in input
che corrisponde al criterio di espressione regolare. Puoi ottenere le corrispondenze successive ripetutamente chiamando il metodo Match.NextMatch dell'oggetto restituito Match. È anche possibile recuperare tutte le corrispondenze in una singola chiamata al metodo chiamando il metodo Regex.Matches(String, Int32).
Eccezioni di timeout
L'eccezione RegexMatchTimeoutException viene generata se il tempo di esecuzione dell'operazione corrispondente supera l'intervallo di timeout specificato dal costruttore Regex.Regex(String, RegexOptions, TimeSpan). Se non si imposta un intervallo di timeout quando si chiama il costruttore, l'eccezione viene generata se l'operazione supera qualsiasi valore di timeout stabilito per il dominio applicazione in cui viene creato l'oggetto Regex. Se non viene definito alcun timeout nella chiamata al costruttore Regex o nelle proprietà del dominio applicazione oppure se il valore di timeout è Regex.InfiniteMatchTimeout, non viene generata alcuna eccezione.