Sdílet prostřednictvím


Metoda System.Text.RegularExpressions.Regex.Match

Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.

Metoda Match(String, Int32) vrátí první podřetězce, který odpovídá vzoru regulárního výrazu počínaje umístěním nebo za startat znakem ve vstupním řetězci. Vzor regulárního výrazu Match(String, Int32) , pro který metoda hledá, je definován voláním jednoho z Regex konstruktorů třídy. Informace o elementech jazyka použitých k vytvoření vzoru regulárního výrazu naleznete v tématu Jazyk regulárních výrazů – stručná referenční dokumentace.

Parametr startat

Volitelně můžete zadat počáteční pozici v řetězci pomocí parametru startat . Všechny shody začínající před startat řetězcem se ignorují. Pokud nezadáte počáteční pozici, začne hledání na výchozí pozici, což je levý konec input hledání zleva doprava a pravý konec input hledání zprava doleva. I přes začátek startatřetězce je index všech vrácených shod relativní vzhledem k začátku řetězce.

I když modul regulárních výrazů nevrací žádnou shodu, která začíná dříve startat, nepřehlíží řetězec před startat. To znamená, že kontrolní výrazy, jako jsou kotvy nebo kontrolní výrazy lookbehind, se stále vztahují na vstup jako celek. Například následující kód obsahuje vzor s kontrolním výrazem lookbehind, který je splněn, i když se vyskytuje před startat indexem 5 ve vstupním řetězci.

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

Tip

  • Pokud vzor začíná ukotvením ^ , ale startat je větší než 0, nikdy se v jednořádkovém vyhledávání nenajde žádná shoda, protože jsou omezeny ^ tak, aby začínaly indexem 0.
  • Kotva je spokojena \G na startatadrese . Z tohoto důvodu, pokud chcete omezit shodu tak, aby přesně na určité pozici znaku v řetězci, ukotvení regulárního výrazu vlevo \G pro vzor zleva doprava. Tím se shoda omezí tak, aby byla přesně startat začínat (nebo pokud je potřeba požadovaná více shod, aby byly shody souvislé).

Hledání zprava doleva

Hledání zprava doleva, to znamená, že když je vzor regulárního výrazu RegexOptions.RightToLeft vytvořen s možností, chová se následujícími způsoby:

  • Kontrola se přesune opačným směrem a vzor se porovná zezadu (vpravo) do přední (vlevo).
  • Výchozí počáteční pozice je pravý konec vstupního řetězce.
  • Pokud startat je zadáno, začne kontrola zprava doleva na znaku startat na - 1 (ne startat).
  • Když je ukotvení zadáno \G na pravém konci vzoru, omezuje (první) shodu přesně na startat - 1.

Další informace o hledání zprava doleva naleznete v režimu zprava doleva.

Určení, jestli byla nalezena shoda

Pomocí kontroly hodnoty vlastnosti vráceného objektu můžete určit, jestli byl ve vstupním řetězci nalezen vzor regulárního Match výrazu Success . Pokud je nalezena shoda, vrácený Match objekt Value vlastnost obsahuje podřetězen z input , který odpovídá vzoru regulárního výrazu. Pokud se nenajde žádná shoda, její hodnota je String.Empty.

První nebo více shod

Tato metoda vrátí první podřetěť nalezenou na pozici znaku startat nebo za znakem input , který odpovídá vzoru regulárního výrazu. Následné shody můžete načíst opakovaným voláním metody vráceného Match objektu Match.NextMatch . Všechny shody můžete také načíst v jednom volání metody voláním Regex.Matches(String, Int32) metody.

Výjimky časového limitu

Výjimka RegexMatchTimeoutException je vyvolána, pokud doba provádění odpovídající operace překračuje časový limit určený konstruktorem Regex.Regex(String, RegexOptions, TimeSpan) . Pokud při volání konstruktoru nenastavíte časový limit, vyvolá se výjimka, pokud operace překročí hodnotu časového limitu vytvořenou pro doménu aplikace, ve které Regex je objekt vytvořen. Pokud není definován žádný časový limit ve Regex volání konstruktoru nebo ve vlastnostech domény aplikace nebo pokud je Regex.InfiniteMatchTimeouthodnota časového limitu , není vyvolána žádná výjimka.