Freigeben über


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})
Perl-Zeichenklassen (alle nur in ASCII-Format)
\d Ziffern (≡ [0-9])
\D keine Ziffern (≡ [0-9])
\s Leerraumzeichen (≡ [\t\n\f\r])
\S kein Leerzeichen (≡ [^\t\n\f\r])
\w Wortzeichen (≡ [0-9A-Za-z_])
\W keine Wortzeichen (≡ [^0-9A-Za-z_])
\h horizontaler Abstand (NICHT UNTERSTÜTZT)
\H kein horizontaler Abstand (NICHT UNTERSTÜTZT)
\v vertikaler Abstand (NICHT UNTERSTÜTZT)
\V kein vertikaler Abstand (NICHT UNTERSTÜTZT)
ASCII-Zeichenklassen
[[:alnum:]] alphanumerisch (≡ [0-9A-Za-z])
[[:alpha:]] alphabetisch (≡ [A-Za-z])
[[:ascii:]] ASCII (≡ [\x00-\x7F])
[[:blank:]] blank (≡ [\t])
[[:cntrl:]] Steuerelement (≡ [\x00-\x1F\x7F])
[[:digit:]] Ziffern (≡ [0-9])
[[:graph:]] grafisch (≡ [!-~][A-Za-z0-9!&quot;#$%&amp;&#39;()\*+,\-./:;&lt;=&gt;?@[\\\]^_` {\|}~])
[[:lower:]] Kleinbuchstaben (≡ [a-z])
[[:print:]] druckbar (≡ [-~] ≡ [[:graph:]])
[[:punct:]] Zeichensetzung (≡ [!-/:-@[-`{-~])
[[:space:]] Leerraumzeichen (≡ [\t\n\v\f\r])
[[:upper:]] Großbuchstaben (≡ [A-Z])
[[:word:]] Wortzeichen (≡ [0-9A-Za-z_])
[[:xdigit:]] Hexadezimalziffer (≡ [0-9A-Fa-f])
  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.

Creative Commons License
Diese Arbeit unterliegt einer Creative Commons Attribution 4.0 International License.

Weitere Informationen