Sdílet prostřednictvím


Regulární výrazy (C++)

Toto téma popisuje gramatiku různých strojů regulárních výrazů.

V tomto tématu

  • Gramatika regulárních výrazů

  • Souhrn gramatiky

  • Sémantické podrobnosti

  • Párování a vyhledávání

  • Formátovací příznaky

Gramatika regulárních výrazů

Prvek

Prvek může být jeden z následujících:

  • Běžný znak, který odpovídá stejnému znaku v cílové sekvenci.

  • Zástupný znak '.', který odpovídá libovolnému znaku v cílové sekvenci, s výjimkou nového řádku.

  • Výraz závorky ve formátu „[expr]“, který odpovídá znaku nebo prvku kolace v cílové sekvenci, která se nachází také v množině definované výrazem expr, nebo ve formátu „[^expr]“, který odpovídá znaku nebo prvku kolace v cílové sekvenci, která se nenachází v množině definované výrazem expr.

    Výraz expr může obsahovat libovolnou kombinaci následujícího:

    • Jednotlivý znak.Přidá daný znak do množiny definované expr.

    • Rozsah znaků ve formátu „ch1-ch2“.Přidá znaky, které jsou reprezentovány hodnotami v uzavřeném rozsahu [ch1, ch2], do množiny definované expr.

    • Třída znaků ve formátu „[:name:]“.Přidá znaky v definované třídě do množiny definované expr.

    • Třída ekvivalence ve formátu „[=elt=]“.Přidá kolační prvky, které jsou rovnocenné elt, do množiny definované expr.

    • Kolační symbol ve formátu „[.elt.]“.Přidá kolační prvek elt do množiny definované expr.

  • Ukotvení.Ukotvení „^“ odpovídá začátku cílové sekvence; ukotvení „$“ odpovídá konci cílové sekvence.

Skupina zachycení ve formátu „( dílčí výraz )“ nebo „\( dílčí výraz \)“ v BRE a grep, který odpovídá sekvenci znaků v cílové sekvenci, spárovaná podle vzorce mezi oddělovači.

  • Řídicí znak ve formátu „\k“, který odpovídá znaku k v cílové sekvenci.

Příklady:

  • „a“ odpovídá cílové sekvenci „a“, ale neodpovídá cílovým sekvencím „B“, „b“ nebo „c“.

  • „.“ odpovídá všem cílovým sekvencím „a“, „B“, „b“ a „c“.

  • „[b-z]“ odpovídá cílovým sekvencím „b“ a „c“, ale neodpovídá cílovým sekvencím „a“ nebo „B“.

  • „[:lower:]“ odpovídá cílovým sekvencím „a“, „b“ a „c“, ale neodpovídá cílové sekvenci „B“.

  • „(a)“ odpovídá cílové sekvenci „a“ a přidružuje skupinu zachycení 1 k dílčí sekvenci „a“, ale neodpovídá cílovým sekvencím „B“, „b“ nebo „c“.

V ECMAScript, BRE a grep může být prvek také zpětným odkazem ve formátu „\dd“, kde dd představuje desetinnou hodnotu N, která odpovídá sekvenci znaků v cílové sekvenci, jež je stejná jako sekvence znaků, které odpovídá N-tá skupina zachycení.Například „(a)\1“ odpovídá cílové sekvenci „aa“, protože první (a jediná) skupina zachycení odpovídá počáteční sekvenci „a“ a \1 odpovídá závěrečné sekvenci „a“.

V ECMAScript může být prvek také jeden z následujících:

  • skupina nezachycení ve formátu „(?: dílčí výraz )“.Odpovídá sekvenci znaků v cílové sekvenci, které odpovídá vzorec mezi oddělovači.

  • Omezený řídicí znak formátu souboru ve formátu „\f“, „\n“, „\r“, „\t“ nebo „\v“.Tyto odpovídají znaku posunu strany, novému řádku, návratovému znaku, horizontálnímu, resp. vertikálnímu tabulátoru v cílové sekvenci.

  • Kladný kontrolní výraz ve formátu „(?= dílčí výraz )“.Odpovídá sekvenci znaků v cílové sekvenci, které odpovídá vzorec mezi oddělovači, ale nemění pozici shody v cílové sekvenci.

  • Záporný kontrolní výraz ve formátu „(?!dílčí výraz )“.Odpovídá jakékoli sekvenci znaků v cílové sekvenci, která neodpovídá vzorci mezi oddělovači a nemění pozici shody v cílové sekvenci.

  • Šestnáctková řídicí sekvence ve formátu „\xhh“.Odpovídá znaku v cílové sekvenci, který je reprezentován dvěma šestnáctkovými číslicemi hh.

  • Řídicí sekvence Unicode ve formátu „\uhhhh“.Odpovídá znaku v cílové sekvenci, který je reprezentován čtyřmi šestnáctkovými číslicemi hhhh.

  • Řídicí sekvence ve formátu „\ck“.Odpovídá řídicímu znaku, který je pojmenován podle znaku k.

  • Řídicí výraz hranice slova ve formátu „\b“.Odpovídá, pokud aktuální pozice v cílové sekvenci je ihned za hranicí slova.

  • Záporný řídicí výraz hranice slova ve formátu „\B“.Odpovídá, pokud aktuální pozice v cílové sekvenci není ihned za hranicí slova.

  • Řídicí znak dsw ve formátu „\d“, „\D“ „\s“, „\S“, „\w“, „\W“.Poskytuje krátký název pro třídu znaků.

Příklady:

  • „(?:a)“ odpovídá cílové sekvenci „a“, ale „(?:a) \1“ je neplatné, protože není k dispozici žádná skupina zachycení 1.

  • „(?=a)a“ odpovídá cílové sekvenci „a“.Kladný kontrolní výraz odpovídá počáteční sekvenci „a“ v cílové sekvenci a závěrečné „a“ v regulárním výrazu odpovídá počáteční sekvenci „a“ v cílové sekvenci.

  • „(?!a)a“ neodpovídá cílové sekvenci „a“.

  • „a\b.“ odpovídá cílové sekvenci „a~“, ale neodpovídá cílové sekvenci „ab“.

  • „a\B.“ odpovídá cílové sekvenci „ab“, ale neodpovídá cílové sekvenci „a~“.

V awk může být prvek také jeden z následujících:

  • řídicí znak formátu souboru ve formátu „\\“, „\a“, „\b“, „\f“, „\n“, „\r“, „\t“ nebo „\v“.Tyto odpovídají zpětnému lomítku, upozornění, klávese Backspace, znaku posunu strany, novému řádku, návratovému znaku, horizontálnímu, resp. vertikálnímu tabulátoru v cílové sekvenci.

  • Osmičková řídicí sekvence ve formátu „\ooo“.Odpovídá znaku v cílové sekvenci, jehož vyjádření je hodnota reprezentovaná jednou, dvěma nebo třemi osmičkovými číslicemi ooo.

Opakování

Libovolný prvek jiný než kladný kontrolní výraz, záporný kontrolní výraz nebo ukotvení může být následován počtem opakování.Nejobecnější typ počtu opakování má podobu „{min,max}“ nebo „\ {min,max\}“ v BRE a grep.Prvek, který je následován touto formou počtu opakování, odpovídá minimálně min po sobě jdoucím výskytům a ne více než max po sobě jdoucím výskytům sekvence, která odpovídá prvku.Například „a{2,3}“ odpovídá cílové sekvenci „aa“ a cílové sekvenci „aaa“, ale nikoli cílové sekvenci „a“ nebo cílové sekvenci „aaaa“.

Počet opakování může mít také jednu z následujících forem:

  • „{min}“ nebo „\{min\}“ v BRE a grep.Ekvivalentní „{min,min}“.

  • „{min,}“ nebo „\{min,\}“ v BRE a grep.Ekvivalentní „{min,unbounded}“.

  • „*“.Ekvivalentní „{0,unbounded}“.

Příklady:

  • „a{2}“ odpovídá cílové sekvenci „aa“, ale nikoli cílové sekvenci „a“ nebo cílové sekvenci „aaa“.

  • „a{2,}“ odpovídá cílové sekvenci „aa“, cílové sekvenci „aaa“ atd., ale nikoli cílové sekvenci „a“.

  • „a*“ odpovídá cílové sekvenci „“, cílové sekvenci „a“, cílové sekvenci „aa“ atd.

Pro všechny gramatiky s výjimkou BRE a grep může mít počet opakování také jednu z následujících forem:

  • „?“.Ekvivalentní „{0,1}“.

  • „+“.Ekvivalentní „{1,unbounded}“.

Příklady:

  • „a?“ odpovídá cílové sekvenci „“ a cílové sekvenci „a“, ale nikoli cílové sekvenci „aa“.

  • „a+“ odpovídá cílové sekvenci „a“, cílové sekvenci „aa“ atd., ale nikoli cílové sekvenci „“.

V jazyce ECMAScript může za všemi formami počtu opakování následovat znak ?, který udává opakování bez metody Greedy.

Zřetězení

Prvky regulárního výrazu, s nebo bez počtů opakování, mohou být zřetězeny do delších regulárních výrazů.Výsledný výraz odpovídá cílové sekvenci, která je zřetězením sekvencí odpovídajících jednotlivým prvkům.Například „a{2,3}b“ odpovídá cílové sekvenci „aab“ a cílové sekvenci „aaab“, ale nikoli cílové sekvenci „ab“ nebo cílové sekvenci „aaaab“.

Alternace

Ve všech gramatikách regulárního výrazu s výjimkou BRE a grep může za zřetězeným regulárním výrazem následovat znak „|“ a jiný zřetězený regulární výraz.Tímto způsobem lze spojit libovolný počet zřetězených regulárních výrazů.Výsledný výraz odpovídá jakékoli cílové sekvenci, která odpovídá jednomu nebo více zřetězeným regulárním výrazům.

Pokud cílové sekvenci odpovídá více než jeden zřetězený regulární výraz, ECMAScript vybere první ze zřetězených regulárních výrazů, který odpovídá sekvenci, jako shodu (první shoda); gramatiky ostatních regulárních výrazů zvolí výraz, jehož výsledkem bude nejdelší shoda.Například „ab|cd“ odpovídá cílové sekvenci „ab“ a cílové sekvenci „cd“, ale nikoli cílové sekvenci „abd“ nebo cílové sekvenci „acd“.

V grep a egrep lze znak nového řádku ('\n') použít k oddělení alternací.

Dílčí výraz

V BRE a grep je dílčí výraz zřetězení.V ostatních gramatikách regulárního výrazu je dílčí výraz změnou.

Souhrn gramatiky

Následující tabulka shrnuje funkce, které jsou k dispozici v různých gramatikách regulárního výrazu:

Prvek

BRE

ERE

ECMA

grep

egrep

awk

alternace pomocí „|“

+

+

+

+

alternace pomocí „\n“

+

+

ukotvení

+

+

+

+

+

+

zpětný odkaz

+

+

+

výraz závorky

+

+

+

+

+

+

skupina zachycení používající „()“

+

+

+

+

skupina zachycení používající „\(\)“

+

+

řídicí sekvence

+

řídicí znak dsw

+

řídicí znak formátu souboru

+

+

šestnáctková řídicí sekvence

+

řídicí znak identity

+

+

+

+

+

+

záporný kontrolní výraz

+

záporný kontrolní výraz hranice slova

+

skupina bez zachycení

+

opakování bez metody Greedy

+

osmičková řídicí sekvence

+

běžný znak

+

+

+

+

+

+

Kladný kontrolní výraz

+

opakování pomocí „{}“

+

+

+

+

opakování pomocí „\{\}“

+

+

opakování pomocí „*“

+

+

+

+

+

+

opakování pomocí „?“ a „+“

+

+

+

+

řídicí sekvence Unicode

+

zástupný znak

+

+

+

+

+

+

kontrolní výraz hranice slova

+

Sémantické podrobnosti

Ukotvení

Ukotvení odpovídá pozici v cílovém řetězci, nikoli znaku.„^“ odpovídá začátku cílového řetězce; „$“ odpovídá konci cílového řetězce.

Zpětný odkaz

Zpětný odkaz je zpětné lomítko, za kterým následuje desítková hodnota N.Odpovídá obsahu N-té skupiny zachycení.Hodnota N nesmí být větší než počet skupin zachycení, které zpětnému odkazu předcházejí.V BRE a grep je hodnota N určena desítkovým číslem, které následuje za zpětným lomítkem.V ECMAScript je hodnota N určena všemi desítkovými čísly, které následují ihned za zpětným lomítkem.Proto v BRE a grep hodnota N nikdy není větší než 9, i když má regulární výraz více než devět skupin zachycení.V ECMAScript je hodnota N neomezená.

Příklady:

  • „((a+)(b+))(c+)\3“ odpovídá cílové sekvenci „aabbbcbbb“.Zpětný odkaz „\3“ odpovídá textu ve třetí skupině zachycení, tedy „(b+)“.Neodpovídá cílové sekvenci „aabbbcbb“.

  • „(a)\2“ není platné.

  • „(b(((((((((a))))))))))\10“ má v BRE a ECMAScript různé významy.V BRE je zpětný odkaz „\1“.Zpětný odkaz odpovídá obsahu první skupiny zachycení (to znamená skupiny, která začíná na „(b“ a končí posledním znakem „)“ a předchází zpětnému odkazu) a závěrečný znak 0 odpovídá běžnému znaku 0.V ECMAScript je zpětný odkaz „\10“.Odpovídá desáté skupině zachycení, tedy té nejvíce uvnitř.

Výraz závorky

Výraz závorky definuje množinu znaků a kolačních prvků.Když výraz závorky začíná znakem ,^ʻ, porovnávání je úspěšné, pokud žádné prvky v množině neodpovídají aktuálnímu znaku v cílové sekvenci.Porovnání je jinak úspěšné, pokud jakýkoli z prvků v množině odpovídá aktuálnímu prvku v cílové sekvenci.

Množinu znaků lze definovat uvedením jakékoli kombinace jednotlivých znaků, rozsahů znaků, tříd znaků, tříd ekvivalence a kolačních symbolů.

Skupina zachycení

Skupina zachycení označuje svůj obsah jako jednu jednotku v gramatice regulárního výrazu a označuje popiskem cílový text, který odpovídá jejímu obsahu.Popisek, který je spojen s každou skupinou zachycení, je číslo, které je určeno výpočtem úvodních závorek, jež označují skupiny zachycení až do úvodní závorky včetně, která označuje aktuální skupinu zachycení.V této implementaci je maximální počet skupin zachycení 31.

Příklady:

  • „ab+“ odpovídá cílové sekvenci „abb“, ale neodpovídá cílové sekvenci „abab“.

  • „(ab)+“ neodpovídá cílové sekvenci „abb“, ale odpovídá cílové sekvenci „abab“.

  • „((a+)(b+))(c+)“ odpovídá cílové sekvenci „aabbbc“ a přidružuje skupinu zachycení 1 k dílčí sekvenci „aabbb“, skupinu zachycení 2 k dílčí sekvenci „aa“, skupinu zachycení 3 k dílčí sekvenci „bbb“ a skupinu zachycení 4 k dílčí sekvenci „c“.

Třída znaků

Třída znaků ve výrazu závorky přidá všechny znaky v pojmenované třídě do množiny znaků, která je definována výrazem závorky.Chcete-li vytvořit třídu znaků, použijte „[:“, dále název třídy a nakonec „:]“.Vnitřně jsou názvy tříd znaků rozpoznávány voláním id = traits.lookup_classname.Znak ch patří do takové třídy, pokud traits.isctype(ch, id) vrátí hodnotu true.Výchozí šablona regex_traits podporuje názvy tříd v následující tabulce.

Název třídy

Popis

„alnum“

malá písmena, velká písmena a číslice

„alpha“

malá písmena a velká písmena

„blank“

mezera nebo tabulátor

„cntrl“

řídicí znaky formátu souboru

„digit“

číslice

„graph“

malá písmena, velká písmena, číslice a interpunkce

„lower“

malá písmena

„print“

malá písmena, velká písmena, číslice, interpunkce a mezera

„punct“

interpunkce

„space“

mezera

„upper“

velká písmena

„xdigit“

číslice, „a“, „b“, „c“, „d“, „e“, „f“, „A“, „B“, „C“, „D“, „E“, „F“

"d"

stejné jako digit

"s"

stejné jako space

„w“

stejné jako alnum

Rozsah znaků

Rozsah znaků ve výrazu závorky přidá všechny znaky v rozsahu do množiny znaků, která je definována výrazem závorky.Chcete-li vytvořit rozsah znaků, umístěte znak „-“ mezi první a poslední znak v rozsahu.Umístíte tak do množiny všechny znaky, které mají číselnou hodnotu větší nebo rovnu číselné hodnotě prvního znaku a menší nebo rovnu číselné hodnotě posledního znaku.Všimněte si, že tato množina přidaných znaků závisí na reprezentaci znaků konkrétní platformy.Pokud se znak ,-ʻ vyskytuje na začátku nebo na konci výrazu závorky nebo jako první nebo poslední znak rozsahu znaků, představuje sám sebe.

Příklady:

  • „[0-7]“ představuje množinu znaků {'0', '1', '2', '3', '4', '5', ' 6', ' 7'}.Odpovídá cílovým sekvencím „0“, „1“ atd., ale nikoli „a“.

  • V systémech, které používají kódování ASCII, představuje „[h-k]“ množinu znaků { 'h', 'i', 'j', 'k' }.Odpovídá cílovým sekvencím „h“, „i“ atd., ale nikoli „\x8A“ nebo „0“.

  • V systémech, které používají kódování EBCDIC, představuje „[h-k]“ množinu znaků { 'h', 'i', '\x8A', '\x8B', '\x8C', '\x8D', '\x8E', '\x8F', '\x90', 'j', 'k' } ('h' je kódováno jako 0x88 a 'k' je kódováno jako 0x92).Odpovídá cílovým sekvencím „h“, „i“, „\x8A“ atd., ale nikoli „0“.

  • „[-0-24]“ představuje množinu znaků { '-', '0', '1', '2', '4' }.

  • „[0-2-]“ představuje množinu znaků { '0', '1', '2', '-' }.

  • V systémech, které používají kódování ASCII, představuje „[+--]“ množinu znaků { '+', ',', '-' }.

Pokud používáte rozsahy citlivé na národní prostředí, jsou znaky v rozsahu určeny kolačními pravidly pro dané národní prostředí.V šabloně jsou znaky, které se kompletují za prvním znakem v definici rozsahu a před posledním znakem v definici rozsahu.V množině jsou také dva koncové znaky.

Kolační prvek

Kolační prvek je sekvence více znaků, která je zpracovávána jako jeden znak.

Kolační symbol

Kolační symbol ve výrazu závorky přidá kolační prvek do množiny, která je definována výrazem závorky.Chcete-li vytvořit kolační symbol, použijte „[.“, dále kolační prvek a nakonec „.]“.

Řídicí sekvence

Řídicí sekvence je zpětné lomítko následované písmenem „c“ a poté jedním z písmen od „a“ do „z“ nebo od „A“ do „Z“.Odpovídá řídicímu znaku ASCII, který je pojmenován podle daného písmena.Například „\ci“ odpovídá cílové sekvenci „\x09“, protože <ctrl-i> má hodnotu 0x09.

Řídicí znak DSW

Řídicí znak dsw je krátký název pro třídu znaků, jak je znázorněno v následující tabulce.

Řídicí sekvence

Třída s ekvivalentním názvem

Třída s výchozím názvem

„\d“

„[[:d:]]“

„[[:digit:]]“

„\D“

„[^[:d:]]“

„[^[:digit:]]“

„\s“

„[[:s:]]“

„[[:space:]]“

„\S“

„[^[:s:]]“

„[^[:space:]]“

„\w“

„[[:w:]]“

„[a-zA-Z0-9_]“*

„\W“

„[^[:w:]]“

„[^a-zA-Z0-9_]“*

*znaková sada ASCII

Třída ekvivalence

Třída ekvivalence ve výrazu závorky přidá všechny znaky a kolační prvky, které jsou ekvivalentní kolačnímu prvku v definici třídy ekvivalence množině, která je definována výrazem závorky.Chcete-li vytvořit třídu ekvivalence, použijte „[=“, dále kolační prvek a nakonec „=]“.Interně jsou dva kolační prvky elt1 a elt2 ekvivalentní, pokud traits.transform_primary(elt1.begin(), elt1.end()) == traits.transform_primary(elt2.begin(), elt2.end()).

Řídicí znak formátu souboru

Řídicí znak formátu souboru obsahuje obvyklé řídicí sekvence jazyka C „\\“, „\a“, „\b“, „\f“, „\n“, „\r“, „\t“, „\v“.Tyto mají obvyklý význam, to znamená zpětné lomítko, upozornění, klávesa Backspace, znak posunu strany, nový řádek, návratový znak, horizontální, resp. vertikální tabulátor.V ECMAScript, nejsou znaky „\a“ a „\b“ povoleny. („\\“ je povoleno, ale jedná se o řídicí znak identity, nikoli řídicí znak formátu souboru).

Šestnáctková řídicí sekvence

Šestnáctková řídicí sekvence je zpětné lomítko následované písmenem „x“ a dvěma šestnáctkovými číslicemi (0-9a-fA-F).Odpovídá znaku v cílové sekvenci, který má hodnotu určenou pomocí dvou číslic.Například „\x41“ odpovídá cílové sekvenci „A“, pokud se používá kódování znaků ASCII.

Řídicí znak identity

Řídicí znak identity je zpětné lomítko následované jedním znakem.Odpovídá danému znaku.Je vyžadován, když má znak zvláštní význam; pomocí řídicího znaku identity je zvláštní výraz odebrán.Příklad:

  • „a*“ odpovídá cílové sekvenci „aaa“, ale neodpovídá cílové sekvenci „a*“.

  • „a\*“ neodpovídá cílové sekvenci „aaa“, ale odpovídá cílové sekvenci „a*“.

Množina znaků, které jsou v řídicím znaku identity povoleny, závisí na gramatice regulárního výrazu, viz následující tabulka.

Gramatika

Povolené řídicí znaky identity

BRE, grep

{ '(', ')', '{', '}', '.', '[', '\', '*', '^', '$' }

ERE, egre

{ '(', ')', '{', '.', '[', '\', '*', '^', '$', '+', '?', '|' }

awk

ERE plus { '"', '/' }

ECMAScript

Všechny znaky kromě těch, které mohou být součástí identifikátoru.Obvykle obsahuje písmena, číslice, '$', '_' a řídicí sekvence Unicode.Další informace naleznete ve specifikacích jazyka ECMAScript.

Jednotlivý znak

Jednotlivý znak ve výrazu závorky přidá daný znak do množiny znaků, která je definována výrazem závorky.Kdekoli ve výrazu závorky s výjimkou na začátku představuje znak '^' sám sebe.

Příklady:

  • „[abc]“ odpovídá cílové sekvenci „a“, „b“ a „c“, ale nikoli sekvenci „d“.

  • „[^abc]“ odpovídá cílové sekvenci „d“, ale nikoli cílovým sekvencím „a“, „b“ nebo „c“.

  • „[a^bc]“ odpovídá cílovým sekvencím „a“, „b“, „c“ a „^“, ale nikoli cílové sekvenci „d“.

Ve všech gramatikách regulárního výrazu s výjimkou ECMAScript platí, že pokud je ']' první znak, který následuje za úvodním znakem '[', nebo se jedná o první znak, který následuje za počátečním znakem '^', představuje sám sebe.

Příklady:

  • „[]a“ je neplatné, protože není k dispozici žádný znak ']' pro ukončení výrazu závorky.

  • „[]abc]“ odpovídá cílovým sekvencím „a“, „b“, „c“ a „]“, ale nikoli cílové sekvenci „d“.

  • „[^]abc]“ odpovídá cílové sekvenci „d“, ale nikoli cílovým sekvencím „a“, „b“, „c“ nebo „]“.

V ECMAScript, použijte '\]' k reprezentaci znaku ']' ve výrazu závorky.

Příklady:

  • „[]a“ odpovídá cílové sekvenci „a“, protože výraz závorky je prázdný.

  • „[\]abc]“ odpovídá cílovým sekvencím „a“, „b“, „c“ a „]“, ale nikoli cílové sekvenci „d“.

Záporný kontrolní výraz

Záporný kontrolní výraz odpovídá všemu kromě svého obsahu.Nespotřebovává žádné znaky v cílové sekvenci.Například „(?!AA)(a*)“ odpovídá cílové sekvenci „a“ a přiřazuje skupinu zachycení 1 k dílčí sekvenci „a“.Neodpovídá cílové sekvenci „aa“, ale cílové sekvenci „aaa“.

Záporný kontrolní výraz hranice slova

Záporný kontrolní výraz hranice slova odpovídá, pokud aktuální pozice v cílovém řetězci nenásleduje ihned za hranicí slova.

Skupina bez zachycení

Skupina bez zachycení označuje svůj obsah jako jednu jednotku v gramatice regulárního výrazu, ale neoznačuje popiskem cílový text.Například „(a)(?:b)*(c)“ odpovídá cílovému textu „abbc“ a přiřazuje skupinu zachycení 1 k dílčí sekvenci „a“ a skupinu zachycení 2 k dílčí sekvenci „c“.

Opakování bez metody Greedy

Opakování bez metody Greedy spotřebovává nejkratší dílčí sekvenci cílové sekvence, která odpovídá vzoru.Opakování s metodou Greedy spotřebovává nejdelší sekvenci.Například „(a+)(a*b)“ odpovídá cílové sekvenci „aaab“.Je-li použito opakování bez metody Greedy, přiřadí skupinu zachycení 1 k dílčí sekvenci „a“ na začátku cílové sekvence a skupinu zachycení 2 k dílčí sekvenci „aab“ na konci cílové sekvence.Je-li použita shoda s metodou Greedy, přiřadí skupinu zachycení 1 k dílčí sekvenci „aaa“ a skupinu zachycení 2 k dílčí sekvenci „b“.

Osmičková řídicí sekvence

Osmičková řídicí sekvence je zpětné lomítko následované jednou, dvěma nebo třemi osmičkovými číslicemi (0-7).Odpovídá znaku v cílové sekvenci, který má hodnotu určenou pomocí těchto číslic.Jsou-li všechny číslice „0“, sekvence je neplatná.Například „\101“ odpovídá cílové sekvenci „A“, pokud se používá kódování znaků ASCII.

Běžný znak

Běžný znak je jakýkoli platný znak, který nemá v aktuální gramatice zvláštní význam.

V ECMAScript mají následující znaky zvláštní význam:

  • ^ $ \ . * + ? ( ) [ ] { } |

V BRE a grep mají následující znaky zvláštní význam:

  • . [ \

Také v BRE a grep mají následující znaky zvláštní význam, jsou-li použity v konkrétním kontextu:

  • '*' má zvláštní význam ve všech případech, kromě případů, kdy se jedná o regulární výraz nebo první znak, který následuje po počátečním znaku '^' v regulárním výrazu, nebo pokud se jedná o první znak skupiny zachycení nebo první znak, který následuje po počátečním znaku '^' ve skupině zachycení.

  • '^' má zvláštní význam, pokud je to první znak regulárního výrazu.

  • '$' má zvláštní význam, pokud je to poslední znak regulárního výrazu.

V ERE, egrep a awk mají následující znaky zvláštní význam:

  • . [ \ ( * + ? { |

Také v ERE, egrep a awk mají následující znaky zvláštní význam, jsou-li použity v konkrétním kontextu.

  • ') má zvláštní význam v případě, že odpovídá předchozímu znaku '('.

  • '^' má zvláštní význam, pokud je to první znak regulárního výrazu.

  • '$' má zvláštní význam, pokud je to poslední znak regulárního výrazu.

Běžný znak odpovídá stejnému znaku v cílové sekvenci.Ve výchozím nastavení to znamená, že porovnání se zdaří, pokud jsou dva znaky zastoupeny stejnou hodnotou.Ve shodě, kde jsou rozlišována malá a velká písmena, dva znaky ch0 a ch1 se shodují, pokud traits.translate_nocase(ch0) == traits.translate_nocase(ch1).Ve shodě, kterou určuje národní prostředí, dva znaky ch0 a ch1 se shodují, pokud traits.translate(ch0) == traits.translate(ch1).

Kladný kontrolní výraz

Kladný kontrolní výraz odpovídá svému obsahu, ale nespotřebovává žádné znaky v cílové sekvenci.

Příklady:

  • „(?=aa)(a*)“ odpovídá cílové sekvenci „aaaa“ a přiřazuje skupinu zachycení 1 k dílčí sekvenci „aaaa“.

  • „(aa)(a*)“ odpovídá cílové sekvenci „aaaa“ a přiřadí skupinu zachycení 1 k dílčí sekvenci „aa“ na začátku cílové sekvence a skupinu zachycení 2 k dílčí sekvenci „aa“ na konci cílové sekvence.

  • „(?=aa)(a)|(a)“ odpovídá cílové sekvenci „a“ a přiřadí skupinu zachycení 1 k prázdné sekvenci (protože kladný kontrolní výraz neuspěl) a skupinu zachycení 2 k dílčí sekvenci „a“.Také odpovídá cílové sekvenci „aa“ a přiřadí skupinu zachycení 1 k dílčí sekvenci „aa“ a skupinu zachycení 2 k prázdné sekvenci.

Řídicí sekvence Unicode

Řídicí sekvence Unicode je zpětné lomítko následované písmenem „u“ a čtyřmi šestnáctkovými číslicemi (0-9a-fA-F).Odpovídá znaku v cílové sekvenci, který má hodnotu určenou pomocí čtyř číslic.Například „\u0041“ odpovídá cílové sekvenci „A“, pokud se používá kódování znaků ASCII.

Zástupný znak

Zástupný znak odpovídá libovolnému znaku v cílovém výrazu, s výjimkou nového řádku.

Hranice slova

Hranice slova se vyskytuje v následujících situacích:

  • Aktuální znak je na začátku cílové sekvence a je jedním ze znaků slova A-Za-z0-9_.

  • Aktuální poloha znaku je za koncem cílové sekvence a poslední znak v cílové sekvenci je jedním ze znaků slova.

  • Aktuální znak je jedním ze znaků slova a předchozí znak není.

  • Aktuální znak není jedním ze znaků slova a předchozí znak je.

Kontrolní výraz hranice slova

Kontrolní výraz hranice slova odpovídá, když aktuální pozice v cílovém řetězci nenásleduje ihned za hranicí slova.

Párování a vyhledávání

Aby regulární výraz odpovídal cílové sekvenci, musí celý regulární výraz odpovídat celé cílové sekvenci.Například regulární výraz „bcd“ odpovídá cílové sekvenci „bcd“, ale nikoli cílové sekvenci „abcd“ ani cílové sekvenci „bcde“.

Aby hledání regulárního výrazu bylo úspěšné, někde v cílové sekvenci se musí nacházet dílčí sekvence, která odpovídá regulárnímu výrazu.Hledání obvykle najde odpovídající dílčí sekvenci nejvíce vlevo.

Příklady:

  • Hledání regulárního výrazu "bcd" v cílové sekvenci "bcd" je úspěšné a odpovídá celé sekvenci.Stejné vyhledávání v cílové sekvenci "abcd" je také úspěšné a odpovídá posledním třem znakům.Stejné vyhledávání v cílové sekvenci "bcde" je také úspěšné a odpovídá prvním třem znakům.

  • Hledání regulárního výrazu "bcd" v cílové sekvenci "bcdbcd" je úspěšné a odpovídá prvním třem znakům.

Pokud existuje více než jedna dílčí sekvence, která odpovídá v určitém umístění cílové sekvence, můžete odpovídající vzor vybrat dvěma způsoby.První shoda zvolí dílčí sekvenci, která byla nalezena jako první, když byl regulární výraz spárován.Nejdelší shoda zvolí nejdelší dílčí sekvenci z dílčích sekvencí, které v daném umístění odpovídají.Pokud existuje více než jedna dílčí sekvence, která má maximální délku, nejdelší shoda zvolí tu, která byla nalezena jako první.Pokud je například použita první shoda, vyhledávání regulárního výrazu „b|bc“ v cílové sekvenci „abcd“ odpovídá dílčí sekvenci „b“, protože levý termín změny odpovídá dané dílčí sekvenci. Proto první shoda nezkouší pro změnu pravý výraz.Při použití nejdelší shody stejné vyhledávání odpovídá „bc“, protože „bc“ je delší než „b“.

Částečná shoda bude úspěšná, pokud shoda dosáhne konce cílové sekvence bez selhání, i když nedosáhla konce regulárního výrazu.Proto by po úspěchu částečné shody mohlo připojení znaků k cílové sekvenci způsobit pozdější selhání částečné shody.Po neúspěchu částečné shody však připojení znaků k cílové sekvenci nemůže způsobit pozdější úspěch částečné shody.Například v případě částečné shody odpovídá „ab“ cílové sekvenci „a“, ale nikoli „ac“.

Formátovací příznaky

Pravidla formátu jazyka ECMAScript

Pravidla formátu SED

Náhradní text

„$&“

„&“

Sekvence znaků, která odpovídá celému regulárnímu výrazu ([match[0].first, match[0].second))

„$$“

„$“

 

„\&“

„&“

„$`“ (znak dolaru následovaný závěrečnou uvozovkou)

 

Sekvence znaků, která předchází dílčí sekvenci odpovídající regulárnímu výrazu ([match.prefix().first, match.prefix().second))

„$'“ (znak dolaru následovaný počáteční uvozovkou)

 

Sekvence znaků, která následuje za dílčí sekvencí odpovídající regulárnímu výrazu ([match.suffix().first, match.suffix().second))

„$n“

„\n“

Sekvence znaků, která odpovídá skupině zachycení na pozici n, kde n je číslo mezi 0 a 9 ([match[n].first, match[n].second)

 

„\\n“

„\n“

„$nn“

 

Sekvence znaků, která odpovídá skupině zachycení na pozici nn, kde nn je číslo mezi 10 a 99 ([match[nn].first, match[nn].second)

Viz také

Referenční dokumentace

Standardní knihovna C++ – přehled