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 zgodny ze wzorcem wyrażenia regularnego, zaczynając od lub po pozycji znaku startat
w ciągu wejściowym. Wzorzec wyrażenia regularnego, dla którego metoda Match(String, Int32) wyszukuje, jest definiowany przez wywołanie jednego z konstruktorów klasy Regex. Aby uzyskać informacje o elementach języka używanych do tworzenia wzorca wyrażeń regularnych, zobacz Regular Expression Language — Quick Reference.
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
w ciągu znaków są ignorowane. Jeśli nie określisz pozycji początkowej, wyszukiwanie rozpoczyna się od pozycji domyślnej, czyli lewego końca input
w wyszukiwaniu od lewej do prawej, a prawy koniec input
w wyszukiwaniu od prawej do lewej. Mimo rozpoczynania od startat
, indeks każdego zwróconego dopasowania jest względny względem początku ciągu.
Mimo że aparat wyrażeń regularnych nie zwraca żadnego dopasowania rozpoczynającego się przed startat
, to jednak nie ignoruje on ciągu przed startat
. Oznacza to, że asercje, takie jak kotwice lub asercje lookbehind , nadal mają zastosowanie do całego wejścia. Na przykład poniższy kod zawiera wzorzec z asercją lookbehind, która jest spełniona, mimo że występuje przed indeksem startat
, czyli 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: {match.Value}");
}
}
}
// This code prints the following output:
// Match found: 98052
Wskazówka
- Jeśli wzorzec rozpoczyna się od kotwicy
^
, alestartat
jest większa niż 0, żadne dopasowania nigdy nie zostaną znalezione w wyszukiwaniu jednowierszowym, ponieważ są one ograniczone przez^
, aby rozpocząć od indeksu 0. -
kotwicy
\G
jest zadowolony zstartat
. W związku z tym, jeśli chcesz ograniczyć dopasowanie, aby zaczynało się dokładnie na określonej pozycji znaku w ciągu, użyj jako kotwicy wyrażenia regularnego\G
po lewej stronie dla wzorca od lewej do prawej. Ogranicza to dopasowanie, więc musi zaczynać się dokładnie odstartat
(lub, gdy wymagane jest wiele dopasowań, dopasowania muszą być ze sobą połączone).
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:
- Skan 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 określono
startat
, skanowanie od prawej do lewej rozpoczyna się od znakustartat
- 1 (niestartat
). - Gdy kotwica
\G
jest określona na prawym końcu wzorca, ogranicza dopasowanie (pierwsze) do końca dokładnie nastartat
- 1.
Aby uzyskać więcej informacji na temat wyszukiwania od prawej do lewej, zobacz tryb od prawej do lewej.
Ustal, czy znaleziono dopasowanie
Można określić, czy wzorzec wyrażenia regularnego został znaleziony w ciągu wejściowym, sprawdzając wartość zwróconej właściwości Success obiektu Match. Jeśli zostanie znalezione dopasowanie, właściwość Value zwróconego obiektu Match zawiera podciąg z input
, który pasuje do wzorca wyrażenia regularnego. Jeśli nie zostanie znalezione dopasowanie, jego wartość jest String.Empty.
Pierwsze lub wiele dopasowań
Ta metoda zwraca pierwszy podciąg znaleziony w pozycji znaku startat
lub po nim w input
, który jest zgodny ze wzorcem wyrażenia regularnego. Kolejne dopasowania można pobrać, wielokrotnie wywołując zwracaną metodę Match.NextMatch obiektu Match. Można również pobrać wszystkie dopasowania w jednym wywołaniu, wywołując metodę Regex.Matches(String, Int32).
Wyjątki czasowe
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 jest tworzony obiekt Regex. Jeśli w wywołaniu konstruktora Regex lub we właściwościach domeny aplikacji nie zdefiniowano limitu czasu lub jeśli wartość limitu czasu jest Regex.InfiniteMatchTimeout, nie jest zgłaszany żaden wyjątek.