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 použitím 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.
Element (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ýrazemexpr
nebo formulářem[^expr]
, který odpovídá znaku nebo kompletačnímu prvku v cílové sekvenci, který není v sadě definované výrazemexpr
.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í prvekelt
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á znakuk
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"
,"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á vzorec mezi oddělovači.
Omezený formát souboru řídicího znaku formuláře
\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.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 číslicemihh
.Řídicí sekvence unicode formuláře
\uhhhh
. Odpovídá znaku v cílové sekvenci, který je reprezentován čtyřmi šestnáctkovými číslicemihhhh
.Řídicí řídicí sekvence formuláře
\ck
. Odpovídá znaku ovládacího prvku, který je pojmenován znakemk
.Výraz hranice slova formuláře
\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 pro třídu znaků.
Příklady:
(?: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
, ,\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 formuláře
\ooo
. Odpovídá znaku v cílové sekvenci, jehož reprezentace je hodnota reprezentovaná jednou, dvěma nebo třemi osmičkovými číslicemiooo
.
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é}.
Příklady:
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é}.
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 , 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í odpovídajících 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"
.
Alternace
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 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 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.
Dílčí výraz
In basic a grep, podvýraz je 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:
Element (Prvek) | basic | extended | ECMAScript | grep | egrep | awk |
---|---|---|---|---|---|---|
alternace pomocí | |
+ | + | + | + | ||
alternace pomocí \n |
+ | + | ||||
ukotvení | + | + | + | + | + | + |
zpětný odkaz | + | + | + | |||
výraz závorky | + | + | + | + | + | + |
capture group using () |
+ | + | + | + | ||
capture group using \(\) |
+ | + | ||||
ří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
Záložka
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é zpětnému odkazu předcházejí. 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 basic grepN 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á.
Příklady:
((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 znaku0
. V ECMAScript, zpět odkaz je\10
. Odpovídá desáté skupině zachycení, tedy té nejvíce uvnitř.
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. Porovnání je jinak úspěšné, pokud jakýkoli z prvků v množině odpovídá aktuálnímu prvku 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č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 , 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 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 [:
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 | 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 , d c , e A B f , C , , E D 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. 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 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 oblasti znaků, představuje sám sebe.
Příklady:
[0-7]
představuje množinu znaků {0
,1
,2
3
5
4
, ,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 jako0x88
k
a je kódován jako0x92
). 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 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.
Kompletující prvek
Kolační prvek je sekvence více znaků, která je zpracovávána jako 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á řídicímu znaku ASCII, který je pojmenován podle daného písmena. 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 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 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 pomocí dvou číslic.
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á danému znaku. Vyžaduje se, když má znak zvláštní význam. Použití řídicího znaku identity odebere zvláštní význam. Pří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*"
.
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 |
---|---|
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á daný znak do množiny znaků, která je definována výrazem závorky. Kdekoli ve výrazu závorky s výjimkou začátku představuje ^
sám sebe.
Příklady:
[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.
Příklady:
[]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.
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"]"
nikoli cílové sekvenci"d"
.
Záporný kontrolní výraz
Záporný kontrolní výraz odpovídá všemu kromě svého 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 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"
.
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é 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. Pokud jsou 0
vš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 porovnání se zdaří, pokud jsou dva znaky zastoupeny 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.
Příklady:
(=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 pomocí čtyř číslic. Například odpovídá cílové sekvenci "a"
při \u0041
použití 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 z 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 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 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"
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 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 čá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) |