std::regex_constants:: syntax_option_type
|
Definiert im Header
<regex>
|
||
|
using
syntax_option_type
=
/* implementierungsdefiniert */
;
|
(1) | (seit C++11) |
|
constexpr
syntax_option_type icase
=
/* nicht spezifiziert */
;
constexpr
syntax_option_type nosubs
=
/* nicht spezifiziert */
;
|
(2) |
(seit C++11)
(inline seit C++17) |
|
inline
constexpr
syntax_option_type multiline
=
/* nicht spezifiziert */
;
|
(3) | (seit C++17) |
syntax_option_type
ist ein
BitmaskType
, der Optionen enthält, die das Verhalten regulärer Ausdrücke steuern.
icase
,
optimize
, etc.) für Typ
(1)
sind innerhalb von
std::basic_regex
dupliziert.
Inhaltsverzeichnis |
Konstanten
| Grammatik-Option | Effekt(e) |
ECMAScript
|
Verwendet die modifizierte ECMAScript-Regular-Expression-Grammatik . |
basic
|
Verwendet die grundlegende POSIX-Regular-Expression-Grammatik ( Grammatik-Dokumentation ). |
extended
|
Verwendet die erweiterte POSIX-Regular-Expression-Grammatik ( Grammatik-Dokumentation ). |
awk
|
Verwendet die Regular-Expression-Grammatik, die vom awk -Utility in POSIX verwendet wird ( Grammatik-Dokumentation ). |
grep
|
Verwendet die Regular-Expression-Grammatik, die vom
grep
-Utility in POSIX verwendet wird. Dies ist effektiv dasselbe wie die
basic
-Option mit der Ergänzung von Newline
'
\n
'
als Alternationstrennzeichen.
|
egrep
|
Verwendet die Regular-Expression-Grammatik, die vom
grep
-Utility mit der
-E
-Option in POSIX verwendet wird. Dies ist effektiv dasselbe wie die
extended
-Option mit der Ergänzung von Newline
'
\n
'
als zusätzliches Alternationstrennzeichen neben
'|'
.
|
| Grammatik-Variante | Effekt(e) |
icase
|
Zeichenvergleiche sollten ohne Berücksichtigung der Groß-/Kleinschreibung durchgeführt werden. |
nosubs
|
Bei der Durchführung von Übereinstimmungen werden alle markierten Teilausdrücke
(
expr
)
als nicht-markierende Teilausdrücke
(?:
expr
)
behandelt. Keine Übereinstimmungen werden in der bereitgestellten
std::regex_match
-Struktur gespeichert und
mark_count()
ist null.
|
optimize
|
Weist die Regular-Expression-Engine an, das Matching zu beschleunigen, mit potenziellen Kosten einer langsameren Konstruktion. Dies könnte beispielsweise bedeuten, einen nicht-deterministischen FSA in einen deterministischen FSA umzuwandeln. |
collate
|
Zeichenbereiche der Form "[a-b]" werden lokalisierungssensitiv sein. |
multiline
(C++17)
|
Legt fest, dass
^
den Anfang einer Zeile und
$
das Ende einer Zeile entsprechen soll, wenn die ECMAScript-Engine ausgewählt ist.
|
Höchstens eine Grammatikoption kann ausgewählt werden aus
ECMAScript
,
basic
,
extended
,
awk
,
grep
,
egrep
. Wenn keine Grammatik gewählt wird, wird
ECMAScript
als ausgewählt angenommen. Die anderen Optionen dienen als Varianten, sodass
std::
regex
(
"meow"
, std
::
regex
::
icase
)
äquivalent ist zu
std::
regex
(
"meow"
, std
::
regex
::
ECMAScript
|
std
::
regex
::
icase
)
.
Hinweise
Da POSIX die "Leftmost Longest"-Matching-Regel verwendet (die längste übereinstimmende Teilsequenz wird gematcht, und wenn es mehrere solcher Teilsequenzen gibt, wird die erste gematcht), ist es beispielsweise nicht geeignet für das Parsen von Auszeichnungssprachen: Ein POSIX-Regex wie "<tag[^>]*>.*</tag>" würde alles vom ersten "<tag" bis zum letzten "</tag>" matchen, einschließlich jedes "</tag>" und "<tag>" dazwischen. Andererseits unterstützt ECMAScript nicht-gierige Matches, und der ECMAScript-Regex "<tag[^>]*>.*?</tag>" würde nur bis zum ersten schließenden Tag matchen.
Beispiel
Veranschaulicht den Unterschied im Matching-Algorithmus zwischen ECMAScript- und POSIX-Regulären Ausdrücken:
#include <iostream> #include <regex> #include <string> int main() { std::string str = "zzxayyzz"; std::regex re1(".*(a|xayy)"); // ECMA std::regex re2(".*(a|xayy)", std::regex::extended); // POSIX std::cout << "Searching for .*(a|xayy) in zzxayyzz:\n"; std::smatch m; std::regex_search(str, m, re1); std::cout << " ECMA (depth first search) match: " << m[0] << '\n'; std::regex_search(str, m, re2); std::cout << " POSIX (leftmost longest) match: " << m[0] << '\n'; }
Ausgabe:
Searching for .*(a|xayy) in zzxayyzz: ECMA (depth first search) match: zzxa POSIX (leftmost longest) match: zzxayy
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 2053 | C++11 | die Konstanten wurden als static deklariert | entfernte den static Spezifizierer |
Siehe auch
|
(C++11)
|
Regulärer Ausdruck-Objekt
(Klassentemplate) |