Sdílet prostřednictvím


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

Standardní knihovna jazyka C++ podporuje více gramatik regulárních výrazů. Toto téma popisuje gramatické varianty dostupné při použití regulárních výrazů.

Gramatika regulárního výrazu

Gramatika regulárního výrazu, která se má použít, je určena pomocí jedné z hodnot výčtu std::regex_constants::syntax_option_type . Tyto gramatiky regulárních výrazů jsou definovány v std::regex_constants:

  • ECMAScript: Toto je nejblíže gramatikě používané jazykem JavaScript a jazyky .NET.
  • basic: Regulární výrazy POSIX basic nebo BRE.
  • extended: Regulární výrazy POSIX extended nebo ERE.
  • awk: To je extended, ale má více řídicích znaků pro netisknutelných znaků.
  • grep: To je basic, ale také umožňuje nové znaky (\n) oddělit alternace.
  • egrep: To je extended, ale také umožňuje nové znaky oddělit alternace.

Ve výchozím nastavení se předpokládá, že pokud není zadána ECMAScript žádná gramatika. Může být zadána pouze jedna gramatika.

Lze použít také několik příznaků:

  • icase: Při porovnávání ignorujte malá a velká písmena.
  • nosubs: Ignorovat označené shody (to znamená výrazy v závorkách); nejsou uloženy žádné náhrady.
  • optimize: Urychlíte párování, a to na možné náklady na větší dobu výstavby.
  • collate: Používejte sekvence kolace citlivé na národní prostředí (například rozsahy formuláře [a-z]).

Nulové nebo více příznaků lze kombinovat s gramatikou, aby bylo možné určit chování modulu regulárních výrazů. Pokud jsou zadány pouze příznaky, ECMAScript předpokládá se jako gramatika.

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á jakémukoli znaku v cílové sekvenci s výjimkou nového řádku.

  • Výraz závorky formuláře[expr], který odpovídá znaku nebo kompletačnímu prvku v cílové sekvenci, která je také v sadě definované výrazem exprnebo formulářem[^expr], který odpovídá znaku nebo kompletačnímu prvku v cílové sekvenci, který není v sadě definované výrazem expr.

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

    • Jednotlivý znak. Přidá znak do sady definované znakem expr.

    • Oblast znaků formuláře ch1-ch2. Přidá znaky, které jsou reprezentovány hodnotami v uzavřeném rozsahu [ch1, ch2] do sady definované .expr

    • Třída znaků formuláře [:name:]. Přidá znaky v pojmenované třídě do sady definované .expr

    • Třída ekvivalence formuláře [=elt=]. Přidá kolací elementy, které jsou ekvivalentní elt sadě definované .expr

    • Kolační symbol formuláře [.elt.]. Přidá kolační prvek elt do sady definované .expr

  • Kotva. Ukotvení ^ odpovídá začátku cílové sekvence. Ukotvení $ odpovídá konci cílové sekvence.

  • Skupina zachycení formuláře (dílčí výraz) nebo \(subexpression\) v basic a grep, která odpovídá posloupnosti znaků v cílové sekvenci, která odpovídá vzoru mezi oddělovači.

  • Řídicí znak identity formuláře \k, který odpovídá znaku k v cílové sekvenci.

Examples:

  • 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" , "c" ale neodpovídá cílovým sekvencím "a" nebo "B".

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

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

V ECMAScript, basica grep, prvek může být také zpětný odkaz formuláře \dd, kde dd představuje desetinnou hodnotu N, která odpovídá posloupnosti znaků v cílové sekvenci, která je stejná jako posloupnost znaků, které odpovídají Nth capture group.

Například odpovídá cílové sekvenci, (a)\1 protože první (a pouze) skupina zachycení odpovídá počáteční sekvenci "aa""a" a pak \1 odpovídá konečné sekvenci "a".

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

  • Skupina bez zachycení formuláře (?: dílčí výraz). Odpovídá sekvenci znaků v cílové sekvenci, která odpovídá vzoru mezi oddělovači.

  • Omezený formát souboru řídicího znaku formuláře \f, \n, \r, \t, nebo \v. Odpovídají informačnímu kanálu formuláře, novému řádku, návratu na začátek řádku, vodorovné tabulátoru a svislé tabulátoru v cílové sekvenci.

  • Pozitivní výraz formuláře (= dílčí výraz). Odpovídá sekvenci znaků v cílové sekvenci, která odpovídá vzoru mezi oddělovači, ale nezmění pozici shody v cílové sekvenci.

  • Záporný výraz formuláře (! subexpression). Odpovídá libovolné sekvenci znaků v cílové sekvenci, která neodpovídá vzoru mezi oddělovači, a nezmění pozici shody v cílové sekvenci.

  • Šestnáctková řídicí sekvence formuláře \xhh. Odpovídá znaku v cílové sekvenci, která je reprezentována dvěma šestnáctkovými číslicemi hh.

  • Řídicí sekvence unicode formuláře \uhhhh. Odpovídá znaku v cílové sekvenci, který je reprezentován čtyřmi šestnáctkovými číslicemi hhhh.

  • Řídicí řídicí sekvence formuláře \ck. Odpovídá znaku ovládacího prvku, který je pojmenován znakem k.

  • Výraz hranice slova ve formuláři \b. Odpovídá, když je aktuální pozice v cílové sekvenci bezprostředně za hranicí slova.

  • Záporný výraz hranice slova ve formuláři \B. Odpovídá, když aktuální pozice v cílové sekvenci není bezprostředně za hranicí slova.

  • Znak dsw řídicího znaku formuláře \d, \D, \s, \S, \w. \W Poskytuje krátký název třídy znaků.

Examples:

  • (?:a) odpovídá cílové sekvenci "a", ale "(?:a)\1" je neplatná, protože neexistuje žádná skupina zachycení 1.

  • (=a)a odpovídá cílové sekvenci "a". Pozitivní kontrolní výraz odpovídá počáteční sekvenci v cílové sekvenci "a" a koneč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 , ale neodpovídá cílové sekvenci "a~""ab".

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

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

  • Formát souboru unikne formuláři \\, , \a, \f\b, \n, \r, , \tnebo \v. Odpovídají zpětnému lomítku, upozornění, backspace, kanálu formuláře, novému řádku, návratu na začátek řádku, vodorovné tabulátoru a svislé tabulátoru v cílové sekvenci.

  • Osmičková řídicí sekvence formuláře \ooo. Odpovídá znaku v cílové sekvenci, jehož reprezentace je hodnota reprezentovaná jednou, dvěma nebo třemi osmičkovými číslicemi ooo.

Repetition (Opakování)

Za libovolným prvkem jiným než kladným kontrolním výrazem, záporným kontrolním výrazem nebo ukotvením může následovat počet opakování. Nejobecnější typ počtu opakování má tvar {min,max} nebo \{min,max\} v basic a .grep Prvek, za kterým následuje tato forma počtu opakování, odpovídá alespoň minimálním následným výskytům a ne více než maximální počet po sobě jdoucích výskytů sekvence, která odpovídá prvku.

Například a{2,3} odpovídá cílové sekvenci a cílové sekvenci "aa""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 basic a grep. Odpovídá {min,min}.

  • {min,} nebo \{min,\} v basic a grep. Odpovídá {min,nevázané}.

  • * je ekvivalentní {0,nevázané}.

Examples:

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

  • a{2,}odpovídá cílové sekvenci , cílové sekvenci "aa""aaa"atd., ale neodpovídá cílové sekvenci "a".

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

Pro všechny gramatiky kromě basic a grep, počet opakování může také mít jednu z následujících forem:

  • ? je ekvivalent {0,1}.

  • + je ekvivalentní {1,nevázané}.

Examples:

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

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

Ve ECMAScriptvšech formách počtu opakování může následovat znak ? , který označuje nesměšné opakování.

Zřetězení

Prvky regulárního výrazu s počtem opakování nebo bez jejich počtu lze zřetězením vytvořit delší regulární výrazy. Výsledný výraz odpovídá cílové sekvenci, která je zřetězením sekvencí, které odpovídají jednotlivým prvkům.

Například a{2,3}b odpovídá cílové sekvenci "aab" a cílové sekvenci , ale neodpovídá cílové sekvenci "aaab""ab" nebo cílové sekvenci "aaaab".

Střídání

Ve všech gramatikách regulárních výrazů s výjimkou basic a grep, zřetězený regulární výraz může následovat znak | (pipe) a další zřetězený regulární výraz. Tímto způsobem lze zkombinovat libovolný počet zřetězených regulárních výrazů. Výsledný výraz odpovídá libovolné cílové sekvenci, která odpovídá jednomu nebo několika zřetězeným regulárním výrazům.

Pokud se cílové sekvenci shoduje více než jeden z zřetězených regulárních výrazů, vybere první zřetězených regulárních výrazů, ECMAScript které odpovídají sekvenci jako shoda, která se bude označovat jako první shoda. Ostatní gramatiky regulárních výrazů vyberou ten, který dosáhne nejdelší shody.

Například ab|cd odpovídá cílové sekvenci "ab" a cílové sekvenci , ale neodpovídá cílové sekvenci "cd""abd" nebo cílové sekvenci "acd".

In grep a egrep, newline znak (\n) lze použít k oddělení alternace.

Podvýraz

In basic a grep, podvýraz je zřetězení. V ostatních gramatikách regulárních výrazů je dílčí výraz alternací.

Souhrn gramatiky

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

prvek basic extended ECMAScript grep egrep awk
alternace pomocí | + + + +
alternace pomocí \n + +
kotva + + + + + +
zpět – referenční dokumentace + + +
Výraz závorky + + + + + +
capture group using () + + + +
capture group using \(\) + +
řídicí sekvence řízení +
ří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 greedy +
osmičková řídicí sekvence +
běžný znak + + + + + +
pozitivní kontrolní výraz +
opakování pomocí {} + + + +
opakování pomocí \{\} + +
opakování pomocí * + + + + + +
opakování pomocí a ?+ + + + +
řídicí sekvence Unicode +
zástupný znak + + + + + +
výraz hranice slova +

Sémantické podrobnosti

Anchor

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

Zpětná referenční dokumentace

Zpětný odkaz je zpětné lomítko, za kterým následuje desetinná hodnota N. Odpovídá obsahu skupiny Nth capture. Hodnota N nesmí být větší než počet skupin zachycení, které předchází zpětnému odkazu. Hodnota basic N je grepurčena desetinnou číslicí, která následuje za zpětným lomítkem. Hodnota ECMAScriptN je určena všemi desetinnými číslicemi, které bezprostředně následují za zpětným lomítkem. Proto hodnota basicgrepN není nikdy větší než 9, i když má regulární výraz více než devět skupin zachycení. Hodnota ECMAScriptN je v hodnotě N nevázaná.

Examples:

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

  • (a)\2 není platný.

  • (b(((((((((a))))))))))\10 má různé významy v basic a v ECMAScript. V basic, zpět odkaz je \1. Zpětný odkaz odpovídá obsahu první skupiny zachycení (tj. ta, která začíná (b a končí posledním ) a končí před zpětným odkazem) a poslední 0 odpovídá běžnému znaku 0. V ECMAScript, zpět odkaz je \10. Odpovídá desáté skupině zachycení, tj. nejvnitřnější.

Výraz závorky

Výraz závorky definuje sadu znaků a kolace prvků. Když výraz závorky začíná znakem ^ , shoda proběhne úspěšně, pokud žádné prvky v sadě neodpovídají aktuálnímu znaku v cílové sekvenci. V opačném případě bude shoda úspěšná, pokud některý z prvků v sadě odpovídá aktuálnímu znaku v cílové sekvenci.

Sadu znaků lze definovat výpisem libovolné kombinace jednotlivých znaků, rozsahů znaků, tříd znaků, tříd ekvivalence a kolacích symbolů.

Skupina zachycení

Skupina zachycení označí její obsah jako jednu jednotku v gramatikě regulárního výrazu a označí cílový text, který odpovídá jeho obsahu. Popisek přidružený ke každé skupině zachycení je číslo, které je určeno počítáním levých závorek, které označují skupiny zachycení až do a včetně levých závorek, které označují aktuální skupinu zachycení. V této implementaci je maximální počet skupin zachycení 31.

Examples:

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

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

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

Třída postavy

Třída znaků ve výrazu závorky přidá všechny znaky v pojmenované třídě do znakové sady, která je definována výrazem závorky. Chcete-li vytvořit třídu znaků, použijte [: název třídy následovaný názvem třídy a následným :].

Interně jsou názvy tříd znaků rozpozná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í regex_traits šablona podporuje názvy tříd v následující tabulce.

Název třídy Description
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 Číslic
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 prostor
upper velká písmena
xdigit číslice, a, , b, dc, eABf, C, , EDF
d stejné jako digit
s stejné jako space
w stejné jako alnum

Rozsah znaků

Oblast znaků ve výrazu závorky přidá všechny znaky v oblasti do znakové sady definované výrazem závorky. Pokud chcete vytvořit oblast znaků, umístěte znak '-' mezi první a poslední znaky v oblasti. Oblast znaků vloží do sady všechny znaky, které mají číselnou hodnotu větší nebo rovnou číselné hodnotě prvního znaku a menší nebo rovno číselné hodnotě posledního znaku. Všimněte si, že tato sada přidaných znaků závisí na reprezentaci znaků specifických pro platformu. Pokud se znak '-' vyskytuje na začátku nebo na konci výrazu závorky nebo jako první nebo poslední znak oblasti znaků, představuje sám sebe.

Examples:

  • [0-7]představuje množinu znaků { 0, 1, 2354, , 6, }. 7 Odpovídá cílovým sekvencím "0", "1"atd., ale ne "a".

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

  • V systémech, které používají kódování znaků EBCDIC, [h-k] představuje sadu znaků { h, i, , '\x8A', '\x8B', '\x8C''\x8D', '\x8E', , '\x8F', , '\x90', j} k (h je kódován jako 0x88k a je kódován jako 0x92). Odpovídá cílovým sekvencím "h", "i", "\x8A"atd., ale ne "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í znaků ASCII, [+--] představuje sadu znaků { +,- }.

Pokud se však použijí oblasti citlivé na národní prostředí, znaky v oblasti jsou určeny pravidly kolace pro národní prostředí. Znaky, které kompletují za prvním znakem v definici oblasti a před posledním znakem v definici oblasti, jsou v sadě. Dva koncové znaky jsou také v sadě.

Kompletující prvek

Kompletující prvek je sekvence více znaků, která je považována za jeden znak.

Kompletující symbol

Kolační symbol ve výrazu závorky přidá kompletující prvek do sady definované výrazem závorky. Chcete-li vytvořit kolační symbol, použijte [. za ním kompletující prvek následovaný kolací a následným .]

Řídicí sekvence

Řídicí řídicí sekvence je zpětné lomítko následované písmenem 'c' následovaným jedním z písmen 'a' prostřednictvím nebo 'A' přes 'z''Z'. Odpovídá znaku ASCII ovládacího prvku, který je pojmenován tímto písmenem. Například odpovídá cílové sekvenci"\x09", "\ci" protože Ctrl+I má hodnotu 0x09.

Řídicí znak DSW

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

Řídicí sekvence Ekvivalentní pojmenovaná třída Výchozí pojmenovaná třída
\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 kolace prvků , které jsou ekvivalentní kompletačnímu prvku v definici třídy ekvivalence, k sadě definované výrazem závorky.

Chcete-li vytvořit třídu ekvivalence, použijte [= následovaný kompletující prvek následovaný =]. Interně dva kompletující prvky elt1 a elt2 jsou 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 se skládá z obvyklých řídicích sekvencí znaku jazyka C, \\, \a, \b, \f, \n, \r, \t. \v Tyto mají obvyklé významy, tj. zpětné lomítko, upozornění, backspace, informační kanál formuláře, nový řádek, návrat na začátek řádku, vodorovná tabulátor a svislá karta. \a V ECMAScripta \b nejsou povoleny. (\\ je povolen, ale je to ří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 následovaným dvěma šestnáctkovými číslicemi (0-9a-fA-F). Odpovídá znaku v cílové sekvenci, který má hodnotu určenou dvěma číslicemi.

Například odpovídá cílové sekvenci "a" při "\x41" použití kódování znaků ASCII.

Řídicí znak identity

Řídicí znak identity je zpětné lomítko následované jedním znakem. Odpovídá tomuto znaku. Vyžaduje se, když má znak zvláštní význam. Použití řídicího znaku identity odebere zvláštní význam. Například:

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

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

Sada znaků povolených v řídicím znaku identity závisí na gramatikě regulárního výrazu, jak je znázorněno v následující tabulce.

Gramatika Povolené řídicí znaky identity
basic, grep { ($^*[}\){.}
extended, egrep { (|?+$^\.*){[}
awk, extended plus { "/ }
ECMAScript Všechny znaky kromě těch, které mohou být součástí identifikátoru. Obvykle se jedná o písmena, číslice, $a _řídicí sekvence unicode. Další informace najdete ve specifikaci ECMAScript jazyka.

Jednotlivý znak

Jednotlivý znak ve výrazu závorky přidá tento znak do znakové sady definované výrazem závorky. Kdekoli ve výrazu závorky s výjimkou začátku představuje ^ sám sebe.

Examples:

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

  • [^abc] odpovídá cílové sekvenci "d", ale nikoli cílovým sekvencí "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ích výrazů s výjimkou ECMAScript, pokud ] je první znak, který následuje za otevřením [ nebo je prvním znakem, který následuje za iniciálou ^, představuje sám sebe.

Examples:

  • []a je neplatný, protože výraz závorky nelze ] ukončit.

  • []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í "a", "b", "c"nebo "]".

Umožňuje ECMAScriptznázorňovat \] znak ] ve výrazu závorky.

Examples:

  • []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 "]" nikoli cílové sekvenci "d".

Záporný kontrolní výraz

Záporný kontrolní výraz odpovídá všemu, ale jeho obsahu. Nevyužívají žádné znaky v cílové sekvenci.

Například (!aa)(a*) odpovídá cílové sekvenci "a" a přidruží skupinu zachycení 1 k dílčí sekvenci "a". Neodpovídá cílové sekvenci ani cílové sekvenci "aa""aaa".

Kontrolní výraz hranice záporného slova

Záporný výraz hranice slova se shoduje, pokud aktuální pozice v cílovém řetězci není bezprostředně za hranicí slova.

Skupina bez zachycení

Skupina bez zachycení označí její obsah jako jednu jednotku v gramatikě regulárního výrazu, ale neoznačuje cílový text.

Například (a)(?:b)*(c) odpovídá cílovému textu "abbc" a přidruží skupinu zachycení 1 k dílčí sekvenci "a" a skupině zachycení 2 s dílčí sekvencí "c".

Opakování bez greedy

Opakování bez greedy spotřebovává nejkratší dílčí sekvenci cílové sekvence, která odpovídá vzoru. Opakování greedy spotřebovává nejdelší. Například (a+)(a*b) odpovídá cílové sekvenci "aaab".

Pokud se použije opakování bez greedy, přidruží skupinu zachycení 1 k dílčí sekvenci "a" na začátku cílové sekvence a skupinu zachycení 2 s dílčí sekvencí "aab" na konci cílové sekvence.

Pokud se použije shoda greedy, přidruží skupinu zachycení 1 k dílčí sekvenci "aaa" a skupině zachycení 2 s dílčí sekvencí "b".

Osmičková řídicí sekvence

Osmičková řídicí sekvence je zpětné lomítko následované jedním, dvěma nebo třemi osmičkovými číslicemi (0–7). Odpovídá znaku v cílové sekvenci, který má hodnotu určenou těmito číslicemi. Pokud jsou 0všechny číslice , sekvence je neplatná.

Například odpovídá cílové sekvenci "a" při \101 použití kódování znaků ASCII.

Běžný znak

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

Následující ECMAScriptznaky mají speciální významy:

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

V basic a grep, následující znaky mají zvláštní významy:

  • . [ \

basic grepNásledující znaky mají také speciální významy, pokud se používají v konkrétním kontextu:

  • * má ve všech případech zvláštní význam, s výjimkou případů, kdy se jedná o první znak regulárního výrazu nebo první znak, který následuje za iniciálou ^ v regulárním výrazu, nebo pokud se jedná o první znak skupiny zachycení nebo první znak, který následuje za počátečním ^ znakem ve skupině zachycení.

  • ^ má zvláštní význam, pokud se jedná o první znak regulárního výrazu.

  • $ má zvláštní význam, pokud se jedná o poslední znak regulárního výrazu.

V extendedznaku , egrepa awk, následující znaky mají zvláštní významy:

  • . [ \ ( * + ? { |

Také v extended, egrepa awk, následující znaky mají zvláštní významy, když se používají v určitém kontextu.

  • ) má zvláštní význam, pokud odpovídá předchozímu (

  • ^ má zvláštní význam, pokud se jedná o první znak regulárního výrazu.

  • $ má zvláštní význam, pokud se jedná o 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 shoda proběhne úspěšně, pokud jsou tyto dva znaky reprezentovány stejnou hodnotou. V porovnání nerozlišující velká a malá písmena odpovídají dvěma znaky ch0 a ch1 shodou, pokud traits.translate_nocase(ch0) == traits.translate_nocase(ch1). Ve shodě citlivém na národní prostředí jsou dva znaky ch0 a ch1 shoda, pokud traits.translate(ch0) == traits.translate(ch1).

Pozitivní kontrolní výraz

Pozitivní kontrolní výraz odpovídá jeho obsahu, ale nevyužívají žádné znaky v cílové sekvenci.

Examples:

  • (=aa)(a*) odpovídá cílové sekvenci "aaaa" a přidruží skupinu zachycení 1 k dílčí sekvenci "aaaa".

  • (aa)(a*) odpovídá cílové sekvenci "aaaa" a přidruží skupinu zachycení 1 k dílčí sekvenci "aa" na začátku cílové sekvence a skupině zachycení 2 s dílčí sekvencí "aa" na konci cílové sekvence.

  • (=aa)(a)|(a) odpovídá cílové sekvenci "a" a přidruží skupinu zachycení 1 k prázdné sekvenci (protože pozitivní kontrolní výraz selhal) a skupinu zachycení 2 s dílčí sekvencí "a". Odpovídá také cílové sekvenci a přidruží skupinu zachycení 1 k dílčí sekvenci "aa""aa" a skupině zachycení 2 s prázdnou sekvencí.

Řídicí sekvence Unicode

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

Divoká karta

Zástupný znak odpovídá jakémukoli 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 z znaků slova. A-Za-z0-9_

  • Aktuální pozice znaku je za koncem cílové sekvence a poslední znak v cílové sekvenci je jedním z 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 wordu

Výraz hranice slova se shoduje, když je aktuální pozice v cílovém řetězci bezprostředně za hranicí slova.

Porovnává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. Regulární výraz bcd například odpovídá cílové sekvenci, ale neodpovídá cílové sekvenci "abcd""bcd" ani cílové sekvenci "bcde".

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

Examples:

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

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

Pokud je v cílové sekvenci více než jedna dílčí sekvence, která odpovídá některému umístění v cílové sekvenci, existují dva způsoby, jak zvolit odpovídající vzor.

První shoda zvolí dílčí sekvenci, která byla nalezena jako první při porovnávání regulárního výrazu.

Nejdelší shoda zvolí nejdelší dílčí sekvenci z těch, které se shodují v daném umístění. Pokud existuje více dílčích sekvencí, které mají maximální délku, nejdelší shoda zvolí tu, která byla nalezena jako první.

Když se například použije první shoda, hledání regulárního výrazu b|bc v cílové sekvenci "abcd" odpovídá dílčí sekvenci "b" , protože levý termín alternace odpovídá dílčí sekvenci, a proto se první shoda nepokusí pravý termín alternace. Pokud je použita nejdelší shoda, stejné shody "bc" hledání, protože "bc" je delší než "b".

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

Formátování příznaků

ECMAScript Pravidla formátu 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ý zpětnými uvozovkami) Sekvence znaků, která předchází dílčí sekvenci, která odpovídá regulárnímu výrazu: [match.prefix().first, match.prefix().second)
$'" (znaménko dolaru následované přeposlání nabídky) Sekvence znaků, která následuje za dílčí sekvencí, která odpovídá 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é

Standardní knihovna C++ – přehled