Regulärer Ausdruck 2 (re2.h), Syntax
Reguläre Ausdrücke sind eine Notation zur Beschreibung von Gruppen von Zeichenfolgen. Wenn sich eine Zeichenfolge in dem satz befindet, der von einem regulären Ausdruck beschrieben wird, sagen wir, dass der reguläre Ausdruck mit der Zeichenfolge übereinstimmt .
Der einfachste reguläre Ausdruck ist ein einzelnes Literalzeichen. Außer bei Metazeichen wie *+?()|
entsprechen die Zeichen einander. Um eine Metazeichen zuzuordnen, versehen Sie sie mit einem umgekehrten Schrägstrich. Entspricht z. B \+
. dem Literal plus-Zeichen.
Zwei reguläre Ausdrücke können geändert oder verkettet werden, um einen neuen regulären Ausdruck zu bilden: Wenn e1mit s und e2mit t übereinstimmt, dann entspricht e1 | e2mit s oder t und e1e2 mit st.
Die Metazeichen *
, +
und ?
sind Wiederholungsoperatoren: e1*
entspricht einer Sequenz von null oder mehr (möglicherweise unterschiedlichen) Zeichenfolgen, von denen jede mit e1 übereinstimmt; e1+
entspricht einem oder mehreren; e1?
entspricht null oder eins.
Die Operatorrangfolge, von der schwächsten bis zur stärksten Bindung, lautet wie folgt:
- Wechsel
- Verkettung
- Wiederholungsoperatoren
Explizite Klammern können verwendet werden, um unterschiedliche Bedeutungen zu erzwingen, wie in arithmetischen Ausdrücken. Einige Beispiele: ab|cd
entspricht (ab)|(cd)
; ab\
entspricht . entspricht a(b\)
.
Die bisher beschriebene Syntax entspricht zum größten Teil der herkömmlichen egrep-Syntax regulärer Ausdrücke in UNIX. Diese Teilmenge reicht aus, um alle regulären Sprachen zu beschreiben. Eine reguläre Sprache ist ein Satz von Zeichenfolgen, die in einem einzelnen Textdurchlauf abgeglichen werden können, wobei nur eine feste Menge an Arbeitsspeicher verwendet wird. Neuere Funktionen für reguläre Ausdrücke (insbesondere Perl und die Sprachen, die ihn kopiert haben) haben viele neue Operatoren und Escapesequenzen hinzugefügt. Diese Änderungen machen die regulären Ausdrücke präziser und manchmal kryptischer, aber nicht leistungsfähiger.
Auf dieser Seite wird die Syntax regulärer Ausdrücke aufgelistet, die von RE2 akzeptiert wird.
Außerdem werden einige Syntaxen aufgelistet, die von PCRE, PERL und VIM akzeptiert werden.
Syntaxtabellen
Arten von Ausdrücken, die aus einem einzelnen Zeichen bestehen | Beispiele |
---|---|
ein beliebiges Zeichen, das möglicherweise ein Zeilenumbruch einschließt (s = wahr) | . |
Zeichenklasse | [xyz] |
negierte Zeichenklasse | [^xyz] |
Perl-Zeichenklasse (link) | \d |
negierte Perl-Zeichenklasse | \D |
ASCII-Zeichenklasse (link) | [[:alpha:]] |
negierte ASCII-Zeichenklasse | [[:^alpha:]] |
Unicode-Zeichenklasse (einbuchstabiger Name) | \pN |
Unicode-Zeichenklasse | \p{Greek} |
negierte Unicode-Zeichenklasse (einbuchstabiger Name) | \PN |
negierte Unicode-Zeichenklasse | \P{Greek} |
Composites | |
---|---|
xy | x, gefolgt von y |
x|y | x oder y (x bevorzugen) |
Wiederholungen | |
---|---|
x* | null oder mehr x (mehr bevorzugen) |
x+ | ein oder mehrere x, mehrere bevorzugen |
x? | null oder ein x, ein x bevorzugen |
x{n,m} | n oder n+1 oder … m x, mehrere bevorzugen |
x{n,} | n oder mehrere x, mehrere bevorzugen |
x{n} | genau n x |
x*? | null oder mehr x, (weniger bevorzugen) |
x+? | ein oder mehr x, weniger bevorzugen |
x?? | null oder ein x, null bevorzugen |
x{n,m}? | n oder n+1 oder … m x, weniger bevorzugen |
x{n,}? | no der mehr x, weniger bevorzugen |
x{n}? | genau n x |
x{} | (≡ x*) (NICHT UNTERSTÜTZT) SCHWUNG |
x{-} | (≡ x*?) (NICHT UNTERSTÜTZT) SCHWUNG |
x{-n} | (≡ x{n}?) (NICHT UNTERSTÜTZT) VIM |
x= | (≡ x?) (NICHT UNTERSTÜTZT) VIM |
Implementierungseinschränkung: Die Zählformulare x{n,m}
, x{n,}
und x{n}
weisen Formulare ab, die eine minimale oder maximale Wiederholungsanzahl über 1000 erstellen. Unbegrenzte Wiederholungen unterliegen dieser Einschränkung nicht.
Possessive Wiederholungen | |
---|---|
x*+ | null oder mehre x, possessiv (NICHT UNTERSTÜTZT) |
x++ | ein oder mehre x, possessiv (NICHT UNTERSTÜTZT) |
x?+ | null oder ein x, possessiv (NICHT UNTERSTÜTZT) |
x {n, m} + | n oder … oder m x, possessiv (NICHT UNTERSTÜTZT) |
x {n,} + | n oder mehre x, possessiv (NICHT UNTERSTÜTZT) |
x{n}+ | genau n x, possessiv (NICHT UNTERSTÜTZT) |
Gruppierung | |
---|---|
(re) | nummerierte Erfassungsgruppe (Teilübereinstimmung) |
(? P<name>re) | benannt & nummerierten Erfassungsgruppe (Teilübereinstimmung) |
(?<name>re) | benannt & nummerierte Erfassungsgruppe (Teilübereinstimmung) (NICHT UNTERSTÜTZT) |
(?' name're) | benannt & nummerierte Erfassungsgruppe (Teilübereinstimmung) (NICHT UNTERSTÜTZT) |
(?:re) | nicht erfassende Gruppe |
(?flags) | Flags innerhalb der aktuellen Gruppe setzen; nicht erfassend |
(?flags:re) | Flags während re setzen; nicht erfassend |
(?#text) | Kommentar (NICHT UNTERSTÜTZT) |
(?|x|y|z) | Zurücksetzen von Zweignummerierungen (NICHT UNTERSTÜTZT) |
(?>re) | possessive Übereinstimmung von re (NICHT UNTERSTÜTZT) |
re@> | possessive Übereinstimmung von re (NICHT UNTERSTÜTZT) VIM |
%(re) | nicht erfassende Gruppe (NICHT UNTERSTÜTZT) VIM |
Flags | |
---|---|
i | Groß-/Kleinschreibung wird nicht beachtet (Standard: falsch) |
m | Mehrzeilenmodus: ^ und $ stimmen zusätzlich zum Anfang- und Endtext mit der Anfangs- und Endzeile überein (Standard: falsch) |
s | lassen. \n zuordnen (Standard falsch) |
U | ungreedy: Tausch der Bedeutung von x* und x*?, x+ und x+?, usw. (Standard false) |
Flagsyntax ist xyz
(set) oder -xyz
(clear) oder xy-z
(set xy
, clear z
).
Leere Zeichenfolgen | |
---|---|
^ | am Text- oder Zeilenanfang (m = wahr) |
$ | am Textende (z. B. \z nicht \Z) oder Zeilenende (m = wahr) |
\A | am Textanfang |
\b | bei ASCII-Wortgrenze (\w auf einer Seite und \W, \A oder \Z auf der anderen) |
\B | nicht bei ASCII-Wortgrenze |
\g. | am Anfang des gerade durchsuchten Subtexts (NICHT UNTERSTÜTZT) PCRE |
\G | am Ende der letzten Übereinstimmung (NICHT UNTERSTÜTZT) PERL |
\Z | am Textende oder vor dem Zeilenumbruch am Ende des Texts (NICHT UNTERSTÜTZT) |
\z | am Textende |
(?=re) | vor dem mit re übereinstimmenden Text (NICHT UNTERSTÜTZT) |
(?!re) | vor dem nicht mit re übereinstimmenden Text (NICHT UNTERSTÜTZT) |
(?<=re) | nach dem mit re übereinstimmenden Text (NICHT UNTERSTÜTZT) |
(?<!re) | nach dem nicht mit re übereinstimmenden Text (NICHT UNTERSTÜTZT) |
re& | vor dem mit re übereinstimmenden Text (NICHT UNTERSTÜTZT) VIM |
re@= | vor dem mit re übereinstimmenden Text (NICHT UNTERSTÜTZT) VIM |
re@! | vor dem nicht mit re übereinstimmenden Text (NICHT UNTERSTÜTZT) VIM |
<re@= | nach dem mit re übereinstimmenden Text (NICHT UNTERSTÜTZT) VIM |
re@<! | nach dem nicht mit re übereinstimmenden Text (NICHT UNTERSTÜTZT) VIM |
\zs | legt den Anfang der Übereinstimmung fest (= \K) (NICHT UNTERSTÜTZT) VIM |
\ze | legt Ende der Übereinstimmung fest (NICHT UNTERSTÜTZT) VIM |
\%^ | Anfang der Datei (NICHT UNTERSTÜTZT) VIM |
\%$ | Ende der Datei (NICHT UNTERSTÜTZT) VIM |
\%V | auf dem Bildschirm (NICHT UNTERSTÜTZT) VIM |
\%# | Cursorposition (NICHT UNTERSTÜTZT) VIM |
\%'m | Position der m-Markierung (NICHT UNTERSTÜTZT) VIM |
\%23l | in Zeile 23 (NICHT UNTERSTÜTZT) VIM |
\%23c | in Spalte 23 (NICHT UNTERSTÜTZT) VIM |
\%23v | in virtueller Spalte 23 (NICHT UNTERSTÜTZT) VIM |
Escapesequenzen | |
---|---|
\a | Bell (≡ \007) |
\f | Seitenvorschub (≡ \014) |
\t | Horizontal-Tabulator (≡ \011) |
\n | Zeilenumbruch (≡ \012) |
\r | Wagenrücklauf (≡ \015) |
\v | vertikales Tabstoppzeichen (≡ \013) |
* | Literal *, für jedes Interpunktionszeichen * |
\123 | oktaler Zeichencode (bis zu drei Ziffern) |
\x7F | hexadezimaler Zeichencode (genau zwei Ziffern) |
\x{10FFFF} | hexadezimaler Zeichencode |
\C | Übereinstimmung mit einem einzelnen Byte sogar im UTF-8-Modus |
\Q...\E | Literaltext …selbst wenn …hat Interpunktion |
\1 | Rückverweis (NICHT UNTERSTÜTZT) |
\b | Rücktaste (NICHT UNTERSTÜTZT) (\010 verwenden) |
\cK | Steuerelement char^ K (NICHT UNTERSTÜTZT) (\001 usw. verwenden) |
\e | Escape (NICHT UNTERSTÜTZT) (\033 verwenden) |
\g1 | Rückverweis (NICHT UNTERSTÜTZT) |
\g{1} | Rückverweis (NICHT UNTERSTÜTZT) |
\g{+1} | Rückverweis (NICHT UNTERSTÜTZT) |
\g{-1} | Rückverweis (NICHT UNTERSTÜTZT) |
\g{name} | benannter Rückverweis (NICHT UNTERSTÜTZT) |
\g<name> | Unterroutinenaufruf (NICHT UNTERSTÜTZT) |
\g'name' | Unterroutinenaufruf (NICHT UNTERSTÜTZT) |
\k<name> | benannter Rückverweis (NICHT UNTERSTÜTZT) |
\k'name' | benannter Rückverweis (NICHT UNTERSTÜTZT) |
\lX | X als Kleinbuchstabe (NICHT UNTERSTÜTZT) |
\ux | X als Großbuchstabe (NICHT UNTERSTÜTZT) |
\L...\E | Text in Kleinbuchstaben (NICHT UNTERSTÜTZT) |
\K | Zurücksetzen des Anfangs von $0 (NICHT UNTERSTÜTZT) |
\N{name} | benanntes Unicode-Zeichen (NICHT UNTERSTÜTZT) |
\R | Zeilenumbruch (NICHT UNTERSTÜTZT) |
\U...\E | Text in Großbuchstaben (NICHT UNTERSTÜTZT) |
\X | erweiterte Unicode-Sequenz (NICHT UNTERSTÜTZT) |
%d123 | Dezimalzeichen 123 (NICHT UNTERSTÜTZT) VIM |
%xFF | Hexadezimalzeichen FF (NICHT UNTERSTÜTZT) VIM |
%o123 | Oktales Zeichen 123 (NICHT UNTERSTÜTZT) VIM |
%u1234 | Unicode-Zeichen 0x1234 (NICHT UNTERSTÜTZT) VIM |
%U12345678 | Unicode-Zeichen 0x12345678 (NICHT UNTERSTÜTZT) VIM |
Zeichenklassenelemente | |
---|---|
x | einzelnes Zeichen |
A-Z | Zeichenbereich (einschließlich) |
\d | Perl-Zeichenklasse |
[:foo:] | ASCII-Zeichenklasse foo |
\p{Foo} | Unicode-Zeichenklasse Foo |
\pF | Unicode-Zeichenklasse F (einbuchstabiger Name) |
Benannte Zeichenklassen als Zeichenklassenelemente | |
---|---|
[\d] | Ziffern (≡ \d) |
[^\d] | keine Ziffern (≡ \D) |
[\D] | keine Ziffern (≡ \D) |
[^\D] | nur Ziffern (doppelt verneint) (≡ \d) |
[[:name:]] | benannte ASCII-Klasse innerhalb der Zeichenklasse (≡ [:name:]) |
[^[:name:]] | benannte ASCII-Klasse innerhalb negierter Zeichenklasse (≡ [:^name:]) |
[\p{Name}] | benannte Unicode-Eigenschaft innerhalb der Zeichenklasse (≡ \p{Name}) |
[^\p{Name}] | benannte Unicode-Eigenschaft innerhalb der negierten Zeichenklasse (≡ \P{Name}) |
Unicode-Zeichenklassennamen – allgemeine Kategorie | |
---|---|
C | andere |
Cc | control |
Cf | format |
Cn | nicht zugewiesene Codepunkte (NICHT UNTERSTÜTZT) |
Co | private Nutzung |
Cs | Ersatz |
L | Buchstabe |
LC | Großbuchstabe (nicht unterstützt) |
L& | Großbuchstabe (nicht unterstützt) |
Ll | Kleinbuchstabe |
Lm | Modifiziererbuchstabe |
Lo | anderer Buchstabe |
Lt | Titelschriftbuchstabe |
Lu | Großbuchstabe |
M | Markierung |
Mc | Zeichenabstandsmarkierung |
Me | Einschlusszeichen |
Mn | Zeichen ohne Zwischenraum |
N | number |
Nd | Dezimalzahl |
Nl | Buchstabe Zahl |
Nein | andere Zahl |
P | Zeichensetzung |
Pc | Verbinder-Interpunktionszeichen |
Pd | Gedankenstrich-Interpunktionszeichen |
Pe | Schließendes Interpunktionszeichen |
Pf | Abschließendes Interpunktionszeichen |
Pi | Beginnendes Interpunktionszeichen |
Po | andere Zeichensetzung |
Ps | offene Zeichensetzung |
E | symbol |
Sc | Währungssymbol |
Sk | Modifizierersymbol |
Sm | Mathematisches Symbol |
So | anderes Symbol |
Z | Trennzeichen |
Zl | Zeilentrennzeichen |
Zp | Absatztrennzeichen |
Zs | Leerzeichentrennzeichen |
Unicode-Zeichenklassennamen – Skripte |
---|
Adlam |
Ahom |
Anatolian_Hieroglyphs |
Arabisch |
Armenisch |
Avestan |
Balinesisch |
Bamum |
Bassa_Vah |
Batak |
Bengali |
Bhaiksuki |
Bopomofo |
Brahmi |
Braille |
Buginese |
Buhid |
Canadian_Aboriginal |
Karisch |
Caucasian_Albanian |
Chakma |
Cham |
Cherokee |
Chorasmian |
Allgemein |
Koptisch |
Cuneiform |
Zyprisch |
Kyrillisch |
Deseret |
Devanagari |
Dives_Akuru |
Dogra |
Duployé-Kurzschrift |
Egyptian_Hieroglyphs |
Elbasan |
Elymaisch |
Äthiopisch |
Georgisch |
Glagolitisch |
Gothic |
Grantha |
Griechisch |
Gujarati |
Gunjala_Gondi |
Gurmukhi |
Han |
Hangul |
Hanifi_Rohingya |
Hanunoo |
Hatran |
Hebräisch |
Hiragana |
Imperial_Aramaic |
Geerbt |
Inscriptional_Pahlavi |
Inscriptional_Parthian |
Javanisch |
Kaithi |
Kannada |
Katakana |
Kayah_Li |
Kharoshthi |
Khitan_Small_Script |
Khmer |
Khojki |
Khudawadi |
Laotisch |
Lateinisch |
Lepcha |
Limbu |
Linear_A |
Linear_B |
Lisu |
Lykisch |
Lydisch |
Mahajani |
Makasar |
Malayalam |
Mandäisch |
Manichäisch |
Marchen |
Masaram_Gondi |
Medefaidrin |
Meetei_Mayek |
Mende_Kikakui |
Meroitic_Cursive |
Meroitic_Hieroglyphs |
Miao |
Modi |
Mongolisch |
Mro |
Multani |
Myanmar |
Nabatäisch |
Nandinagari |
New_Tai_Lue |
Newa |
Nko |
Nushu |
Nyiakeng_Puachue_Hmong |
Ogham |
Ol_Chiki |
Old_Hungarian |
Old_Italic |
Old_North_Arabian |
Old_Permic |
Old_Persian |
Old_Sogdian |
Old_South_Arabian |
Old_Turkic |
Odia |
Osage |
Osmanisch |
Pahawh_Hmong |
Palmyrenisch |
Pau_Cin_Hau |
Phags_Pa |
Phönizisch |
Psalter_Pahlavi |
Rejang |
Runisch |
Samaritanisch |
Saurashtra |
Sharada |
Shaw-Alphabet |
Siddham |
Gebärdensprache |
Sinhala |
Sogdisch |
Sora_Sompeng |
Soyombo |
Sundanesisch |
Syloti_Nagri |
Syrisch |
Tagalog |
Tagbanwa |
Tai_Le |
Tai_Tham |
Tai_Viet |
Takri |
Tamil |
Tangutisch |
Telugu |
Thaana |
Thailändisch |
Tibetisch |
Tifinagh |
Tirhuta |
Ugaritisch |
Vai |
Wancho |
Warang_Citi |
Jesidisch |
Yi |
Zanabazar_Square |
VIM-Zeichenklasse | |
---|---|
\i | Kennungszeichen (NICHT UNTERSTÜTZT) VIM |
\I | \i mit Ausnahme von Ziffern (NICHT UNTERSTÜTZT) VIM |
\k | Schlüsselwortzeichen (NICHT UNTERSTÜTZT) VIM |
\K | \k mit Ausnahme von Ziffern (NICHT UNTERSTÜTZT) VIM |
\f | Dateinamenzeichen (NICHT UNTERSTÜTZT) VIM |
\F | \f mit Ausnahme von Ziffern (NICHT UNTERSTÜTZT) VIM |
\p | druckbares Zeichen (NICHT UNTERSTÜTZT) VIM |
\P | \p mit Ausnahme von Ziffern (NICHT UNTERSTÜTZT) VIM |
\s | Leerraumzeichen (≡ [\t]) (NICHT UNTERSTÜTZT) VIM |
\S | kein Leerraumzeichen (≡ [^ \t]) (NICHT UNTERSTÜTZT) VIM |
\d | Ziffern (≡ [0-9]) VIM |
\D | nicht \d VIM |
\x | Hexadezimalziffern (≡ [0-9a-FA-f]) (NICHT UNTERSTÜTZT) VIM |
\X | nicht \x (NICHT UNTERSTÜTZT) VIM |
\o. | oktale Ziffern (≡ [0-7]) (NICHT UNTERSTÜTZT) VIM |
\O | nicht \o (NICHT UNTERSTÜTZT) VIM |
\w | Wortzeichen VIM |
\W | nicht \w VIM |
\h | Kopf eines Wortzeichens (NICHT UNTERSTÜTZT) VIM |
\H | nicht \h (NICHT UNTERSTÜTZT) VIM |
\a | alphabetisch (NICHT UNTERSTÜTZT) VIM |
\A | nicht \a (NICHT UNTERSTÜTZT) VIM |
\l | Kleinbuchstaben (NICHT UNTERSTÜTZT) VIM |
\L | keine Kleinbuchstaben (NICHT UNTERSTÜTZT) VIM |
\u | Großschreibung (NICHT UNTERSTÜTZT) VIM |
\U | keine Großschreibung (NICHT UNTERSTÜTZT) VIM |
_x | \x und Zeilenumbruch für jedes x (NICHT UNTERSTÜTZT) VIM |
\c | Groß-/Kleinschreibung ignorieren (NICHT UNTERSTÜTZT) VIM |
\C | Groß-/Kleinschreibung anpassen(NICHT UNTERSTÜTZT) VIM |
\m | magic (NICHT UNTERSTÜTZT) VIM |
\M | nomagic (NICHT UNTERSTÜTZT) VIM |
\v | verymagic (NICHT UNTERSTÜTZT) VIM |
\V | verynomagic (NICHT UNTERSTÜTZT) VIM |
\Z | Unterschiede bei Unicode-Zeichenkombinationen ignorieren (NICHT UNTERSTÜTZT) VIM |
Magic | |
---|---|
(?{code}) | beliebiger Perl-Code (NICHT UNTERSTÜTZT) PERL |
(??{code}) | zurückgestellter, beliebiger Perl-Code (NICHT UNTERSTÜTZT) PERL |
(?n) | rekursive Aufruf von regexp-Erfassungsgruppe n (NICHT UNTERSTÜTZT) |
(?+n) | rekursive Aufruf von relativer Gruppe +n (NICHT UNTERSTÜTZT) |
(?-n) | rekursive Aufruf von relativer Gruppe -n (NICHT UNTERSTÜTZT) |
(?C) | PCRE-Callout (NICHT UNTERSTÜTZT) PCRE |
(?R) | rekursive Aufruf von gesamter regexp (≡ (?0)) (NICHT UNTERSTÜTZT) |
(?&Name) | rekursive Aufruf von benannter Gruppe (NICHT UNTERSTÜTZT) |
(?P=name) | benannter Rückverweis (NICHT UNTERSTÜTZT) |
(?P>name) | rekursive Aufruf von benannter Gruppe (NICHT UNTERSTÜTZT) |
(? (cond)true|false) | bedingte Verzweigung (NICHT UNTERSTÜTZT) |
(?(cond)true) | bedingte Verzweigung (NICHT UNTERSTÜTZT) |
(*AKZEPTIEREN) | regexps eher wie Prolog machen (NICHT UNTERSTÜTZT) |
(*COMMIT) | (NICHT UNTERSTÜTZT) |
(*F) | (NICHT UNTERSTÜTZT) |
(*FAIL) | (NICHT UNTERSTÜTZT) |
(*MARK) | (NICHT UNTERSTÜTZT) |
(*PRUNE) | (NICHT UNTERSTÜTZT) |
(*ÜBERSPRINGEN) | (NICHT UNTERSTÜTZT) |
(*DANN) | (NICHT UNTERSTÜTZT) |
(*ANY) | Festlegen der Konvention für Zeilenumbruch (nicht unterstützt) |
(*ANYCRLF) | (NICHT UNTERSTÜTZT) |
(*CR) | (NICHT UNTERSTÜTZT) |
(*CRLF) | (NICHT UNTERSTÜTZT) |
(*LF) | (NICHT UNTERSTÜTZT) |
(*BSR_ANYCRLF) | Festlegen der \R-Konvention (nicht unterstützt) PCRE |
(*BSR_UNICODE) | (NICHT UNTERSTÜTZT) PCRE |
Lizenz für Inhalte
Hinweis
Teile dieser Seite sind Änderungen, die auf von Chromium.org erstellten und freigegebenen Werken basieren und gemäß den in der Creative Commons Attribution 4.0 International License beschriebenen Begriffen verwendet werden. Die Originalseite von Chromium finden Sie hier.
Diese Arbeit unterliegt einer Creative Commons Attribution 4.0 International License.