System.Text.RegularExpressions.Regex.Match, metoda
Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.
Metoda Match(String, Int32) zwraca pierwszy podciąg, który pasuje do wzorca wyrażenia regularnego, zaczynając od lub po startat
pozycji znaku w ciągu wejściowym. Wzorzec wyrażenia regularnego, dla którego Match(String, Int32) metoda wyszukuje, jest definiowana przez wywołanie do jednego z Regex konstruktorów klas. Aby uzyskać informacje o elementach języka używanych do tworzenia wzorca wyrażeń regularnych, zobacz Język wyrażeń regularnych — krótki przewodnik.
Parametr startat
Opcjonalnie możesz określić pozycję początkową w ciągu przy użyciu parametru startat
. Wszystkie dopasowania rozpoczynające się przed startat
ciągiem są ignorowane. Jeśli nie określisz pozycji początkowej, wyszukiwanie zaczyna się od pozycji domyślnej, która jest lewy koniec input
wyszukiwania w wyszukiwaniu od lewej do prawej, a prawy koniec input
w wyszukiwaniu od prawej do lewej. Pomimo wartości rozpoczynającej się od startat
, indeks każdego zwróconego dopasowania jest względny do początku ciągu.
Mimo że aparat wyrażeń regularnych nie zwraca żadnego dopasowania rozpoczynającego się przed startat
, nie ignoruje ciągu przed startat
. Oznacza to, że asercji, takich jak kotwice lub asercji lookbehind, nadal mają zastosowanie do danych wejściowych jako całości. Na przykład poniższy kod zawiera wzorzec z asercją lookbehind, która jest spełniona, mimo że występuje przed indeksem startat
5 w ciągu wejściowym.
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: {0}", match.Value);
}
}
}
// This code prints the following output:
// Match found: 98052
Napiwek
- Jeśli wzorzec zaczyna się od
^
kotwicy, alestartat
jest większy niż 0, żadne dopasowania nigdy nie zostaną znalezione w wyszukiwaniu jednowierszowym, ponieważ są one ograniczone^
, aby rozpocząć od indeksu 0. - Kotwica jest zadowolona
\G
z .startat
W związku z tym, jeśli chcesz ograniczyć dopasowanie, tak aby zaczynało się dokładnie w określonym położeniu znaku w ciągu, zakotwiczenie wyrażenia regularnego z\G
lewej strony dla wzorca od lewej do prawej. Ogranicza to dopasowanie, więc musi zaczynać się dokładnie odstartat
(lub, gdy wymagane jest wiele dopasowań, więc dopasowania są ciągłe).
Wyszukiwania od prawej do lewej
Wyszukiwanie od prawej do lewej, czyli gdy wzorzec wyrażenia regularnego jest skonstruowany z opcją RegexOptions.RightToLeft , zachowuje się w następujący sposób:
- Skanowanie porusza się w przeciwnym kierunku, a wzorzec jest dopasowany z tyłu (po prawej) do przodu (po lewej).
- Domyślna pozycja początkowa to prawy koniec ciągu wejściowego.
- Jeśli
startat
zostanie określony, skanowanie od prawej do lewej rozpoczyna się od znaku ostartat
wartości -1 (niestartat
). \G
Gdy kotwica jest określona na prawym końcu wzorca, ogranicza dopasowanie (pierwsze) do końca dokładnie ostartat
- 1.
Aby uzyskać więcej informacji na temat wyszukiwania od prawej do lewej, zobacz Tryb od prawej do lewej.
Określanie, czy znaleziono dopasowanie
Można określić, czy wzorzec wyrażenia regularnego został znaleziony w ciągu wejściowym, sprawdzając wartość właściwości zwróconego MatchSuccess obiektu. Jeśli zostanie znalezione dopasowanie, właściwość zwróconego Match obiektu Value zawiera podciąg, który jest zgodny ze input
wzorcem wyrażenia regularnego. Jeśli nie zostanie znalezione dopasowanie, jego wartość to String.Empty.
Pierwsze lub wiele dopasowań
Ta metoda zwraca pierwszy podciąg znaleziony w pozycji znaku lub po startat
nim input
zgodny ze wzorcem wyrażenia regularnego. Kolejne dopasowania można pobrać, wielokrotnie wywołując metodę zwróconego MatchMatch.NextMatch obiektu. Można również pobrać wszystkie dopasowania w jednym wywołaniu metody, wywołując metodę Regex.Matches(String, Int32) .
Wyjątki przekroczenia limitu czasu
Wyjątek RegexMatchTimeoutException jest zgłaszany, jeśli czas wykonywania pasującej operacji przekracza interwał limitu czasu określony przez konstruktora Regex.Regex(String, RegexOptions, TimeSpan) . Jeśli nie ustawisz interwału przekroczenia limitu czasu podczas wywoływania konstruktora, wyjątek jest zgłaszany, jeśli operacja przekracza wartość limitu czasu ustanowioną dla domeny aplikacji, w której Regex jest tworzony obiekt. Jeśli w wywołaniu konstruktora lub we właściwościach domeny aplikacji nie zdefiniowano Regex limitu czasu lub jeśli wartość limitu czasu wynosi Regex.InfiniteMatchTimeout, nie zostanie zgłoszony wyjątek.