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ězec, který odpovídá vzoru regulárního výrazu ve vstupním řetězci, počínaje pozicí nebo po startat znaku. 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 v řetězci 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 to, že začíná na startat, je index všech vrácených shod relativní vůči začátku řetězce.

I když modul regulárních výrazů nevrací žádnou shodu, která začíná před 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 funkcí lookbehind, který je vyhodnocen, přestože 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: {match.Value}");
        }
    }
}

// This code prints the following output:
// Match found: 98052

Návod

  • Pokud vzorec začíná ukotvením ^, ale startat je větší než 0, nebude při jednořádkovém vyhledávání nikdy nalezena žá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 začínala přesně na určité znakové pozici v řetězci, ukotvěte regulární výraz pomocí \G na levou stranu pro vzor zleva doprava. Tím se shoda omezí tak, aby začínala přesně na startat (nebo, pokud je požadováno 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, kontrola zprava doleva začíná u znaku na startat - 1 (ne na startat).
  • Když je ukotvení \G zadáno na pravém konci vzoru, omezuje (první) shodu tak, aby končila přesně na startat - 1.

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

Zjistěte, zda byla nalezena shoda

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

První nebo několik shod

Tato metoda vrátí první podřetěť nalezenou na pozici znaku startat nebo po ní v input, která odpovídá vzoru regulárního výrazu. Můžete načíst další shody opakovaným voláním metody vráceného objektu MatchMatch.NextMatch. Shody můžete také načíst jediným zavoláním metody Regex.Matches(String, Int32).

Výjimky timeoutu

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.