Azərbaycan  AzərbaycanDeutschland  DeutschlandLietuva  LietuvaMalta  Maltaශ්‍රී ලංකාව  ශ්‍රී ලංකාවTürkmenistan  TürkmenistanTürkiyə  TürkiyəУкраина  Украина
Unterstützung
www.datawiki.de-de.nina.az
  • Heim

Ein regulärer Ausdruck englisch regular expression Abkürzung RegExp oder Regex ist in der theoretischen Informatik eine

Regulärer Ausdruck

  • Startseite
  • Regulärer Ausdruck
Regulärer Ausdruck
www.datawiki.de-de.nina.azhttps://www.datawiki.de-de.nina.az

Ein regulärer Ausdruck (englisch regular expression, Abkürzung RegExp oder Regex) ist in der theoretischen Informatik eine Zeichenkette, die der Beschreibung von Mengen von Zeichenketten mit Hilfe bestimmter syntaktischer Regeln dient. Neben Implementierungen in vielen Programmiersprachen verarbeiten auch viele Texteditoren reguläre Ausdrücke in der Funktion „Suchen und Ersetzen“. Ein einfacher Anwendungsfall von regulären Ausdrücken sind Wildcards.

Reguläre Ausdrücke können als Filterkriterien in der Textsuche verwendet werden, indem der Text mit dem Muster des regulären Ausdrucks abgeglichen wird. Dieser Vorgang wird auch Pattern Matching genannt. So ist es beispielsweise möglich, alle Wörter aus einer Wortliste herauszusuchen, die mit S beginnen und auf D enden, ohne die dazwischen liegenden Buchstaben oder deren Anzahl explizit vorgeben zu müssen.

Der Begriff des regulären Ausdrucks geht im Wesentlichen auf den Mathematiker Stephen Kleene zurück, der die ähnliche Bezeichnung reguläre Menge verwendete.

Reguläre Ausdrücke in der theoretischen Informatik

Theoretische Grundlagen

Reguläre Ausdrücke sind spezielle Formeln, die reguläre Sprachen beschreiben können. Diese regulären Sprachen befinden sich auf der untersten Stufe der Chomsky-Hierarchie (Typ-3). Sie werden durch reguläre Grammatiken erzeugt.

Zu jedem regulären Ausdruck existiert ein endlicher Automat, der die vom Ausdruck spezifizierte Sprache akzeptiert. Ein entsprechender (nichtdeterministischer) endlicher Automat kann mit der Thompson-Konstruktion aus einem regulären Ausdruck konstruiert werden. Daraus folgt die relativ einfache Implementierbarkeit regulärer Ausdrücke. Umgekehrt existiert zu jedem endlichen Automaten ein regulärer Ausdruck, der die vom Automaten akzeptierte Sprache beschreibt. Ein entsprechender regulärer Ausdruck kann mit Kleenes Algorithmus aus einem nichtdeterministischen endlichen Automaten konstruiert werden. Kleenes Algorithmus erzeugt meist sehr lange reguläre Ausdrücke. Die Zustands-Elimination (deutsch eigentlich: „Zustands-Eliminierung“) liefert in der Praxis meist kürzere reguläre Ausdrücke. Im schlimmsten Fall (englisch „worst case“) liefern jedoch beide Algorithmen reguläre Ausdrücke der Länge |Σ|4|Q|{\displaystyle |\Sigma |4^{|Q|}}, wobei |Σ|{\displaystyle |\Sigma |} die Anzahl der Zeichen des zugrundeliegenden Alphabets und |Q|{\displaystyle |Q|} die Anzahl der Zustände im Automaten bezeichnen.

Syntax

Die Syntax definiert genau, wie reguläre Ausdrücke aussehen.

Reguläre Ausdrücke sind immer über einer vorgegebenen endlichen Zeichenmenge Σ{\displaystyle \Sigma } definiert, dem sogenannten Alphabet. Reguläre Ausdrücke basieren auf genau drei Operationen: Alternative, Verkettung und Wiederholung. Die formale Definition sieht folgendermaßen aus:

  1. ∅{\displaystyle \varnothing } (das spezielle Symbol für die leere Menge) ist ein regulärer Ausdruck.
  2. für alle a∈Σ{\displaystyle a\in \Sigma } ist a{\displaystyle a} (die Repräsentation eines Zeichens aus dem zugrunde liegenden Alphabet) ein regulärer Ausdruck.
  3. Sind x{\displaystyle x} und y{\displaystyle y} reguläre Ausdrücke, so sind auch (x|y){\displaystyle (x|y)} (Alternative), (xy){\displaystyle (xy)} (Verkettung) und (x∗){\displaystyle (x^{*})} (Kleenesche Hülle, Kleene-Stern) reguläre Ausdrücke.

Für Alternative wird statt |{\displaystyle |} auch das Symbol +{\displaystyle +} verwendet. Man schreibt dann (x+y){\displaystyle (x+y)}. Für die Verkettung (Konkatenation) gibt es alternativ auch ein Operatorsymbol; man schreibt dann (x⋅y){\displaystyle (x\cdot y)}.

Man kann auch zusätzliche Konstanten und Operationen erlauben, sofern sich ihre Wirkung auch mit den oben genannten Grundregeln beschreiben ließe. So findet man in der Literatur unter anderem auch ϵ{\displaystyle \epsilon } als regulären Ausdruck oder die positive Kleenesche Hülle x+{\displaystyle x^{+}}, die als Abkürzung von (x(x∗)){\displaystyle (x(x^{*}))} betrachtet werden kann.

Gibt man eine Rangfolge der Operatoren an, kann man auf einige Klammern verzichten. Die Rangfolge ist üblicherweise Kleene-Stern vor Konkatenation vor Alternative. Statt (((ab)|c)∗){\displaystyle (((ab)|c)^{*})} genügt dann die Schreibweise (ab|c)∗{\displaystyle (ab|c)^{*}}.

Die Anzahl der verschachtelten *-Operatoren wird als Sternhöhe bezeichnet.

Semantik

Die Semantik regulärer Ausdrücke definiert genau, welche formale Bedeutung die Syntax regulärer Ausdrücke hat.

Ein regulärer Ausdruck beschreibt eine formale Sprache, also eine Menge von Wörtern (Zeichenketten). Die Definition der Semantik lässt sich analog zur Syntaxdefinition beschreiben. Dabei bezeichnet L(r){\displaystyle {\mathcal {L}}(r)} die formale Sprache, die durch den regulären Ausdruck r{\displaystyle r} spezifiziert wird.

  1. L(∅)=∅{\displaystyle {\mathcal {L}}(\varnothing )=\emptyset }
    Das Symbol für die leere Menge spezifiziert die leere Sprache.
  2. für alle a∈Σ{\displaystyle a\in \Sigma } gilt L(a)={a}{\displaystyle {\mathcal {L}}(a)=\{a\}}
    Jeder Repräsentant eines Zeichens aus dem Alphabet spezifiziert die Sprache, die nur das Wort der Länge eins mit diesem Zeichen enthält.
  3. sind x{\displaystyle x} und y{\displaystyle y} reguläre Ausdrücke, so gilt:
    • L(x|y)=L(x)∪L(y){\displaystyle {\mathcal {L}}(x|y)={\mathcal {L}}(x)\cup {\mathcal {L}}(y)}
    Die Alternative zwischen zwei Ausdrücken beschreibt die Sprache, die aus der Vereinigung der zwei Sprachen entsteht, die durch die beiden Ausdrücke beschrieben werden.
    • L(xy)={αβ|α∈L(x)∧β∈L(y)}{\displaystyle {\mathcal {L}}(xy)=\{\,\alpha \beta \,|\,\alpha \in {\mathcal {L}}(x)\land \beta \in {\mathcal {L}}(y)\,\}}
    Die Konkatenation zweier Ausdrücke beschreibt die Sprache, die nur die Wörter enthält, die ein Wort aus der vom ersten Ausdruck beschriebenen Sprache als Präfix haben und deren unmittelbar folgendes Rest-Suffix ein Wort aus der vom zweiten Ausdruck beschriebenen Sprache ist.
    • L(x∗)={α1…αn|n∈N0,α1,…,αn∈L(x)}{\displaystyle {\mathcal {L}}(x^{*})=\{\,\alpha _{1}\dots \alpha _{n}\,|\,n\in \mathbb {N} _{0},\,\alpha _{1},\dots ,\alpha _{n}\in {\mathcal {L}}(x)\,\}}
    Die kleenesche Hülle eines regulären Ausdrucks x{\displaystyle x} beschreibt die Sprache mit jenen Wörtern, die durch Aneinanderreihen beliebiger Wörter der durch x{\displaystyle x} beschriebenen Sprache entstehen.

Enthält die Syntaxdefinition regulärer Ausdrücke auch die Konstante ϵ{\displaystyle \epsilon }, so ist deren Bedeutung definiert als L(ϵ)={ε}{\displaystyle {\mathcal {L}}(\epsilon )=\{\varepsilon \}}, also die Sprache, die nur das leere Wort ε{\displaystyle \varepsilon } enthält.

Das leere Wort ist ein Wort einer formalen Sprache (ε∈Σ∗{\displaystyle \varepsilon \in \Sigma ^{*}}) und somit kein regulärer Ausdruck. Die Sprache, die nur das leere Wort enthält, lässt sich aber auch ohne die Konstante ϵ{\displaystyle \epsilon } durch einen regulären Ausdruck beschreiben, zum Beispiel: ∅∗{\displaystyle \varnothing ^{*}}. Es wird jedoch nicht immer optisch zwischen einem regulären Ausdruck und der zugehörigen Sprache unterschieden, sodass man statt a{\displaystyle \mathbf {a} } auch a{\displaystyle a} als regulären Ausdruck für die Sprache {a}{\displaystyle \{a\}} verwendet, ebenso kann die Unterscheidung zwischen ∅{\displaystyle \varnothing } und ∅{\displaystyle \emptyset } sowie zwischen ϵ{\displaystyle \epsilon } und ε{\displaystyle \varepsilon } entfallen.

Beispiele

Wenn das Alphabet aus den Buchstaben a{\displaystyle a}, b{\displaystyle b} und c{\displaystyle c} besteht, also Σ={a,b,c}{\displaystyle \Sigma =\{a,b,c\}}, dann lassen sich die folgenden Sprachen mit den entsprechenden regulären Ausdrücken beschreiben:

  • Die Sprache aller Wörter, die aus beliebig vielen a{\displaystyle a} oder aus beliebig vielen b{\displaystyle b} bestehen:
    Syntax: regex=a∗|b∗{\displaystyle \mathrm {regex} =\mathbf {a} ^{*}|\mathbf {b} ^{*}}. Semantik: L(regex)={a}∗∪{b}∗{\displaystyle {\mathcal {L}}(\mathrm {regex} )=\{a\}^{*}\cup \{b\}^{*}}
  • Die Sprache aller Wörter, die mit a{\displaystyle a} anfangen und mit beliebig vielen b{\displaystyle b} oder beliebig vielen c{\displaystyle c} enden:
    Syntax: regex=a(b∗|c∗){\displaystyle \mathrm {regex} =\mathbf {a} (\mathbf {b} ^{*}|\mathbf {c} ^{*})}. Semantik: L(regex)={aφ|φ∈{b}∗∪{c}∗}{\displaystyle {\mathcal {L}}(\mathrm {regex} )=\{a\varphi \;\vert \;\varphi \in \{b\}^{*}\cup \{c\}^{*}\}}
  • Die Sprache aller Wörter, die mit a{\displaystyle a} anfangen und mit einer beliebigen Folge aus den Zeichen a,b,c{\displaystyle a,b,c} enden:
    Syntax: regex=a(a|b|c)∗{\displaystyle \mathrm {regex} =\mathbf {a} (\mathbf {a} |\mathbf {b} |\mathbf {c} )^{*}}. Semantik: L(regex)={aφ|φ∈Σ∗}{\displaystyle {\mathcal {L}}(\mathrm {regex} )=\{a\varphi \;\vert \;\varphi \in \Sigma ^{*}\}}
  • Die Sprache aller Wörter, die zwei Zeichen lang sind und aus den Zeichen a{\displaystyle a} und b{\displaystyle b} bestehen:
    Syntax: regex=(a|b)(a|b){\displaystyle \mathrm {regex} =(\mathbf {a} |\mathbf {b} )(\mathbf {a} |\mathbf {b} )}. Semantik: L(regex)={ψφ|ψ,φ∈{a,b}}={aa,ab,ba,bb}{\displaystyle {\mathcal {L}}(\mathrm {regex} )=\{\psi \varphi \;\vert \;\psi ,\varphi \in \{a,b\}\}=\{aa,ab,ba,bb\}}
  • Die Sprache aller Wörter, die aus beliebig vielen Teilwörtern ab{\displaystyle ab} bestehen:
    Syntax: regex=(ab)∗{\displaystyle \mathrm {regex} =(\mathbf {a} \mathbf {b} )^{*}}. Semantik: L(regex)={ab}∗={ϵ,ab,abab,ababab,⋯}{\displaystyle {\mathcal {L}}(\mathrm {regex} )=\{ab\}^{*}=\{\epsilon ,ab,abab,ababab,\cdots \}}

Anwendung regulärer Ausdrücke

Ken Thompson nutzte diese Notation in den 1960er Jahren, um qed (eine Vorgängerversion des Unix-Editors ed) zu bauen und später das Werkzeug grep zu schreiben. Seither implementieren sehr viele Programme und Bibliotheken von Programmiersprachen Funktionen, um reguläre Ausdrücke zum Suchen und Ersetzen von Zeichenketten zu nutzen. Beispiele dafür sind die Programme sed, grep, emacs, die Programmiersprachen Perl und Tcl und Standardbibliotheken der Programmiersprachen C, C++, Java, JavaScript, Python, PHP, Ruby und das .Net-Framework. Auch die Textverarbeitung und die Tabellenkalkulation des Office-Paketes OpenOffice.org bieten die Möglichkeit, mit regulären Ausdrücken im Text zu suchen.

Zwischen verschiedenen Regexp-Implementierungen gibt es Unterschiede in Funktionsumfang und Syntax. In Programmiersprachen haben sich überwiegend die Perl Compatible Regular Expressions (PCRE) durchgesetzt, die sich an der Umsetzung in Perl 5.0 orientieren. Daneben wird bei POSIX.2 zwischen „grundlegenden“ regulären Ausdrücken (basic regular expressions) und „erweiterten“ regulären Ausdrücken (extended regular expressions) unterschieden.

Einige Programme, zum Beispiel der Texteditor Vim, bieten die Möglichkeit, zwischen verschiedenen Regexp-Syntaxen hin- und herzuschalten.

Reguläre Ausdrücke spielen eine wichtige Rolle bei der lexikalischen Analyse von Quelltexten, beispielsweise in Compilern oder zur Syntaxhervorhebung in Editoren. Ein lexikalischer Scanner zerlegt den Quelltext mithilfe von regulären Ausdrücken in sogenannte Tokens (Schlüsselwörter, Operatoren, …). Da es sich bei den meisten Programmiersprachen um kontextfreie Sprachen handelt, sind reguläre Ausdrücke nicht mächtig genug, um deren Syntax zu beschreiben. Daher wird die bei Compilern folgende syntaktische Analyse in der Regel von einem separaten Programm, dem Parser, erledigt.

Reguläre Ausdrücke spielen auch in der Bioinformatik eine Rolle. Sie kommen in Proteindatenbanken zum Einsatz, um Proteinmotive zu beschreiben. Der reguläre Ausdruck

W-x{9,11}-[VFY]-[FYW]-x{6,7}-[GSTNE]-[GSTQCR]-[FYW]-R-S-A-P

beschreibt zum Beispiel eine Proteindomäne in PROSITE. Der obige reguläre Ausdruck besagt Folgendes: Am Anfang wähle die Aminosäure Tryptophan (Einbuchstabencode W), dann wähle 9 bis 11 Aminosäuren frei aus, dann wähle entweder V, F oder Y, dann wähle entweder F, Y oder W, dann wieder 6 bis 7 Aminosäuren frei, dann entweder G, S, T, N oder E, dann entweder G, S, T, Q, C oder R, dann F, Y oder W, dann R dann S dann A dann P.

Reguläre Ausdrücke in der Praxis

Die meisten heutigen Implementierungen unterstützen Erweiterungen wie zum Beispiel Rückwärtsreferenzen (backreferences). Hierbei handelt es sich nicht mehr um reguläre Ausdrücke im Sinne der theoretischen Informatik, denn die so erweiterten Ausdrücke beschreiben nicht mehr notwendigerweise Sprachen vom Typ 3 der Chomsky-Hierarchie.

Die folgenden Syntaxbeschreibungen beziehen sich auf die Syntax der gängigen Implementierungen mit Erweiterungen, sie entsprechen also nur teilweise der obigen Definition aus der theoretischen Informatik.

Eine häufige Anwendung regulärer Ausdrücke besteht darin, spezielle Zeichenketten in einer Menge von Zeichenketten zu finden. Die im Folgenden angegebene Beschreibung ist eine (oft benutzte) Konvention, um Konzepte wie Zeichenklasse, Quantifizierung, Verknüpfung und Zusammenfassen konkret zu realisieren. Hierbei wird ein regulärer Ausdruck aus den Zeichen des zugrunde liegenden Alphabets in Kombination mit den Metazeichen [ ] ( ) { } | ? + - * ^ $ \ . (teilweise kontextabhängig) gebildet, bei manchen Implementierungen auch : ! < =. Die Meta-Eigenschaft eines Zeichens kann durch einen vorangestellten Rückwärtsstrich (Backslash) aufgehoben werden. Alle übrigen Zeichen des Alphabets stehen für sich selbst.

Zeichenliterale

Diejenigen Zeichen, die direkt (wörtlich, literal) übereinstimmen müssen, werden auch direkt notiert. Je nach System gibt es auch Möglichkeiten, das Zeichen durch den Oktal- oder Hexadezimalcode (\ooo bzw. \xhh) oder die hexadezimale Unicode-Position (\uhhhh) anzugeben.

Ein Zeichen aus einer Auswahl

Mit eckigen Klammern ([ und ]) lässt sich eine Zeichenauswahl definieren. Der Ausdruck in eckigen Klammern steht dann für genau ein Zeichen aus dieser Auswahl. Innerhalb dieser Zeichenklassendefinitionen haben einige Symbole andere Bedeutungen als im normalen Kontext. Teilweise ist die Bedeutung eines Symbols vom Kontext abhängig, in dem es innerhalb der Klammern auftritt.

Beispielsweise bedeutet ein Zirkumflex ^ am Anfang einer Zeichenklassendefinition, dass die Zeichenklasse negiert bzw. invertiert wird (im Sinne der Komplementbildung). Steht ein Zirkumflex jedoch irgendwo sonst in der Definition, ist es wörtlich („literally“) zu verstehen. Ebenfalls kontextabhängig ist die Bedeutung des Bindestrich-Zeichens (-). Zudem unterscheiden sich hier die Regexp-Auswerter („regex engines“) (zum Beispiel POSIX und PCRE) in einigen Punkten voneinander. Steht ein Bindestrich - zwischen zwei Zeichen in der Klassendefinition, zum Beispiel [a-g], so ist er als Bis-Strich zu verstehen, das heißt als Beschreibung eines Zeichenintervalls oder Zeichenbereichs bezüglich der ASCII-Tabelle. Das genannte Beispiel wäre äquivalent zu [abcdefg]. Am Anfang oder Ende einer Zeichenklasse stehende Bindestriche werden als das Zeichen selbst interpretiert.

Beispiele für Zeichenauswahl
[egh] eines der Zeichen e, g oder h
[0-6] eine Ziffer von 0 bis 6 (Bindestriche sind Indikator für einen Bereich)
[A-Za-z0-9] ein beliebiger lateinischer Buchstabe oder eine beliebige Ziffer
[^a] ein beliebiges Zeichen außer a (^ am Anfang einer Zeichenklasse negiert selbige)
[-A-Z], [A-Z-] (bzw. [A-Z\-a-z], allerdings nicht gemäß POSIX) Auswahl enthält auch den Bindestrich -, wenn er das erste oder das letzte Zeichen in der Aufzählung einer Zeichenklasse ist bzw. bei PCRE, wenn seine Metafunktion innerhalb einer Auswahl durch einen vorangestellten Backslash aufgehoben wird

Vordefinierte Zeichenklassen

Es gibt vordefinierte Zeichenklassen, die allerdings nicht von allen Implementierungen in gleicher Weise unterstützt werden, da sie lediglich Kurzformen sind und auch durch eine Zeichenauswahl beschrieben werden können. Wichtige Zeichenklassen sind:

\d digit eine Ziffer, also [0-9] (und evtl. auch weitere Zahlzeichen in Unicode, z. B. bengalische Ziffern)
\D no digit ein Zeichen, das keine Ziffer ist, also [^\d]
\w word character ein Buchstabe, eine Ziffer oder der Unterstrich, also [a-zA-Z_0-9] (und evtl. auch nicht-lateinische Buchstaben, z. B. Umlaute)
\W no word character ein Zeichen, das weder Buchstabe noch Zahl noch Unterstrich ist, also [^\w]
\s whitespace meist zumindest das Leerzeichen und die Klasse der Steuerzeichen \f, \n, \r, \t und \v
\S no whitespace ein Zeichen, das kein Whitespace ist, also [^\s]

Ein Punkt (.) bedeutet, dass an seinem Platz ein (fast) beliebiges Zeichen stehen kann. Die meisten RegExp-Implementierungen sehen standardmäßig Zeilenumbrüche nicht als beliebiges Zeichen an, jedoch kann dieses in einigen Programmen mittels des sogenannten Single-Line-Modifiers s (zum Beispiel in /foo.bar/s) erreicht werden.

In vielen neueren Implementierungen können innerhalb der eckigen Klammern nach POSIX auch Klassen angegeben werden, die selbst wiederum eckige Klammern enthalten. Sie lauten beispielsweise:

Beispiele für Zeichenklassen, hierarchisch sortiert
  • [:cntrl:] – Steuerzeichen. Im ASCII sind das die Zeichen 00 bis 1F und 7F (DEL).
  • [:print:] – Druckbare Zeichen: [:alnum:], [:punct:] und Leerzeichen
    • [:space:] – Whitespace: Horizontales und vertikales Tabulatorzeichen, Zeilen- und Seitenvorschub, Wagenrücklauf und Leerzeichen ZK1
      • [:blank:] – Leerzeichen oder Tabulatorzeichen
    • [:graph:] – Graphische Zeichen: [:alnum:] oder [:punct:]
      • [:punct:] – Satzzeichen, unter anderem Interpunktionszeichen, Anführungszeichen oder Unterstriche.
      • [:alnum:] – Alphanumerische Zeichen: [:alpha:] oder [:digit:]
        • [:xdigit:] – Hexadezimale Ziffern: 0 bis 9, A bis F, a bis f.
          • [:digit:] – Die Ziffern 0 bis 9
        • [:alpha:] – Buchstaben: [:lower:] oder [:upper:]
          • [:lower:] – Kleinbuchstaben ZK2: nicht notwendigerweise nur von a bis z
          • [:upper:] – Großbuchstaben ZK2: nicht notwendigerweise nur von A bis Z
Anmerkungen:
ZK1 
Das auch als „geschütztes Leerzeichen“ bekannte Zeichen mit der Unicode-Nummer 160 (hex: A0) (entspricht dem HTML-Entity &nbsp;) wird von der Klasse [:space:] möglicherweise nicht gefunden und muss separat anhand des Codepoints identifiziert werden.
ZK2 
Was Buchstaben sind, ist in üblichen Betriebssystemen locale-abhängig, also abhängig von der eingestellten Region und Sprache.

Quantoren

Quantoren (englisch quantifier, auch Quantifizierer oder Wiederholungsfaktoren) erlauben es, den vorherigen Ausdruck in verschiedener Vielfachheit in der Zeichenkette zuzulassen.

{min,max} Der voranstehende Ausdruck muss mindestens min-mal und darf maximal max-mal vorkommen.
{n} Der voranstehende Ausdruck muss exakt n-mal vorkommen. Dies entspricht {n,n}.
{0,max} Der voranstehende Ausdruck darf maximal max-mal vorkommen.
{min,} Der voranstehende Ausdruck muss mindestens min-mal vorkommen.
? Der voranstehende Ausdruck kommt kein- oder einmal vor, er ist „optional“. Dies entspricht {0,1}.
+ Der voranstehende Ausdruck muss mindestens einmal vorkommen, darf aber auch mehrfach vorkommen. Dies entspricht {1,}.
* Der voranstehende Ausdruck darf beliebig oft, auch keinmal, vorkommen. Dies entspricht {0,}.

Die Quantoren beziehen sich dabei auf den vorhergehenden regulären Ausdruck, jedoch nicht zwangsläufig auf die durch ihn gefundene Übereinstimmung. So wird zwar zum Beispiel durch a+ ein „a“ oder auch „aaaa“ vertreten, jedoch entspricht [0-9]+ nicht nur sich wiederholenden gleichen Ziffern, sondern auch Folgen gemischter Ziffern, beispielsweise „072345“.

Weitere Beispiele sind:

  • [ab]+ entspricht „a“, „b“, „aa“, „bbaab“ etc.
  • [0-9]{2,5} entspricht zwei, drei, vier oder fünf Ziffern in Folge, z. B. „42“ oder „54072“, jedoch nicht den Zeichenfolgen „0“, „1.1“ oder „a1a1“.

Soll eine Zeichenkette nur aus dem gesuchten Muster bestehen (und es nicht nur enthalten), so muss in den meisten Implementierungen explizit definiert werden, dass das Muster vom Anfang (\A oder ^) QF1 bis zum Ende der Zeichenkette (\Z, \z oder $) QF1 reichen soll. Andernfalls erkennt zum Beispiel [0-9]{2,5} auch bei der Zeichenkette „1234507“ die Teilzeichenkette „12345“. Aus dem gleichen Grund ergäbe beispielsweise a* immer einen Treffer, da jede Zeichenfolge insbesondere das leere Wort mindestens 0-mal das Zeichen „a“ enthält.

Quantoren sind standardmäßig „gierig“ (englisch greedy) implementiert. Das heißt, ein regulärer Ausdruck wird zur größtmöglichen Übereinstimmung aufgelöst. Da dieses Verhalten jedoch nicht immer so gewollt ist, lassen sich bei vielen neueren Implementierungen Quantoren als „genügsam“ oder „zurückhaltend“ (englisch non-greedy, reluctant) deklarieren. Zum Beispiel wird in Perl oder tcl hierfür dem Quantor ein Fragezeichen ? nachgestellt. Die Implementierung von genügsamen Quantoren ist vergleichsweise aufwendig und während des Suchvorgangs langsam (erfordert Backtracking), weshalb manche Implementierungen diese ausdrücklich vermeiden z. B. sed.

Beispiel (Perl-Syntax)
Angenommen, es wird der reguläre Ausdruck A.*B auf die Zeichenfolge „ABCDEB“ angewendet, so würde er sie als „ABCDEB“ finden. Mit Hilfe des „genügsamen“ Quantors *? passt der nun modifizierte Ausdruck – also A.*?B – nur die Zeichenkette „AB“, bricht also die Suche nach dem ersten gefundenen „B“ ab. Ein gleichwertiger regulärer Ausdruck für Interpreter, die diesen Quantor nicht unterstützen, wäre A[^B]*B.

QF1 
Die Zeichen ^ und $ passen im multiline-Modus zusammen, also wenn der m-Modifier gesetzt wird, auch Zeilenanfänge und -enden.

Possessives Verhalten

Eine Variante des oben beschriebenen gierigen Verhaltens ist das possessive matching. Da hierbei jedoch das Backtracking verhindert wird, werden einmal übereinstimmende Zeichen nicht wieder freigegeben. Daher finden sich in der Literatur auch die synonymen Bezeichnungen atomic grouping, independent subexpression oder non-backtracking subpattern. Die Syntax für diese Konstrukte variiert bei den verschiedenen Programmiersprachen. Ursprünglich wurden solche Teilausdrücke (englisch „subpattern“) in Perl durch (?>Ausdruck) formuliert. Daneben existieren seit Perl 5.10 die äquivalenten, in Java bereits üblichen possessiven Quantoren ++, *+, ?+ und {min,max}+.

Beispiel
Angenommen es wird auf die Zeichenfolge „ABCDEB“ der reguläre Ausdruck A.*+B angewendet, so fände er keine Übereinstimmung. Bei der Abarbeitung des regulären Ausdrucks würde der Teil .*+ bis zum Ende der Zeichenkette übereinstimmen. Um jedoch den gesamten Ausdruck zu finden, müsste ein Zeichen – hier also das „B“ – wieder freigegeben werden. Der possessive Quantor verbietet dies aufgrund des unterdrückten Backtrackings, weshalb keine erfolgreiche Übereinstimmung gefunden werden kann.

Gruppierungen und Rückwärtsreferenzen

Ausdrücke lassen sich mit runden Klammern ( und ) zusammenfassen: Etwa erlaubt (abc)+ ein „abc“ oder ein „abcabc“ etc. Wörtlich gemeinte Klammern kann man mit \( und \) benennen. Bei manchen Implementationen ist es umgekehrt; in jedem Fall sind aber runde Klammern innerhalb von Zeichenklassen immer wörtlich.

Einige Implementierungen speichern die gefundenen Übereinstimmungen von Gruppierungen ab und ermöglichen deren Wiederverwendung im regulären Ausdruck oder bei der Textersetzung. Diese werden Rückwärtsreferenzen (englisch back references) genannt. Häufig wird dazu die Schreibweise \n oder $n verwendet, wobei n die Übereinstimmung der n-ten Gruppierung entspricht. Eine Sonderstellung stellt dabei n=0 dar, das meist für die Übereinstimmung des gesamten regulären Ausdrucks steht.

Beispiel
Ein Suchen und Ersetzen mit AA(.*?)BB als regulärem Suchausdruck und \1 als Ersetzung ersetzt alle Zeichenketten, die von AA und BB eingeschlossen sind, durch den zwischen AA und BB enthaltenen Text. Das heißt AA und BB und der Text dazwischen werden ersetzt durch den Text, der ursprünglich zwischen AA und BB stand, also fehlen AA und BB im Ergebnis.

Interpreter von regulären Ausdrücken, die Rückwärtsreferenzen im Suchmuster zulassen, entsprechen nicht mehr dem Typ 3 der Chomsky-Hierarchie. Mit dem Pumping-Lemma lässt sich zeigen, dass ein regulärer Ausdruck, der feststellt, ob in einer Zeichenkette vor und nach der 1 die gleiche Anzahl von 0 steht, keine reguläre Sprache ist.

Daneben gibt es auch noch Gruppierungen, die keine Rückwärtsreferenz erzeugen (englisch non-capturing). Die Syntax dafür lautet in den meisten Implementierungen (?:…). Regexp-Dokumentationen weisen darauf hin, dass die Erzeugung von Rückwärtsreferenzen stets vermieden werden soll, wenn kein späterer Zugriff auf sie erfolge. Denn die Erzeugung der Referenzen kostet Ausführungszeit und belegt Platz zur Speicherung der gefundenen Übereinstimmung. Zudem lassen die Implementationen nur eine begrenzte Anzahl an Rückwärtsreferenzen zu (häufig nur maximal 9).

Beispiel

Mit dem regulären Ausdruck \d+(?:-\d+)* können Folgen von durch Bindestriche getrennten Zahlenfolgen gefunden werden, ohne dabei die letzte durch einen Bindestrich getrennte Zahlenfolge als Rückreferenz zu erhalten.

Beispiel

Ein Datum im Format MM/DD/YYYY soll in das Format YYYY-MM-DD überführt werden.

  1. Mit Hilfe des Ausdrucks ([0-1]?[0-9])\/([0-3]?[0-9])\/([0-9]{4}) werden die drei Zahlengruppen extrahiert.
  2. Mit dem Ersetzungs-Ausdruck \3-\1-\2 werden die einzelnen Gruppen in das richtige Format überführt.

Alternativen

Man kann alternative Ausdrücke mit dem |-Symbol zulassen.

Beispiel
ABC|abc bedeutet „ABC“ oder „abc“, aber z. B. nicht „Abc“.

Weitere Zeichen

Um die oft auf Zeichenketten bezogenen Anwendungen auf dem Computer zu unterstützen, werden in der Regel zusätzlich zu den bereits genannten die folgenden Zeichen definiert:

^ steht für den Zeilenanfang (nicht zu verwechseln mit ^ bei der Zeichenauswahl mittels [ und ]).
$ kann je nach Kontext für das Zeilen- oder Zeichenketten-Ende stehen, wobei bei manchen Implementierungen noch ein „\n“ folgen darf. Das tatsächliche Ende passt zu \z.
\ hebt gegebenenfalls die Metabedeutung des nächsten Zeichens auf (siehe Maskierungszeichen). Beispielsweise lässt der Ausdruck (A\*)+ die Zeichenketten „A*“, „A*A*“ usw. zu. Auf diese Weise lässt sich auch ein Punkt „.“ mit \. suchen, während nach \ mit \\ gesucht wird.
\b leere Zeichenkette am Wortanfang oder am Wortende
\B leere Zeichenkette, die nicht den Anfang oder das Ende eines Wortes bildet
\< leere Zeichenkette am Wortanfang
\> leere Zeichenkette am Wortende
\n ein Zeilenumbruch im Unix-Format
\r ein Zeilenumbruch im (alten, d. h. vor dem Jahr 1999) Mac-Format
\r\n ein Zeilenumbruch im DOS- und Windows-Format
\t ein Horizontal-Tabulatorzeichen
Beispiel
[^ ]$ bedeutet: Die Zeichenkette muss aus mindestens einem Zeichen bestehen, und das letzte Zeichen darf kein Leerzeichen sein.

Look-around assertions

Perl Version 5 führte zusätzlich zu den üblichen regulären Ausdrücken auch look-ahead und look-behind assertions (etwa „vorausschauende“ bzw. „nach hinten schauende“ Annahmen oder Behauptungen) ein, was unter dem Begriff look-around assertions zusammengefasst wird. Diese Konstrukte erweitern die regulären Ausdrücke um die Möglichkeit, kontextabhängige (englisch: „context sensitive“) Bedingungen zu formulieren, ohne den Kontext selbst als passend zu finden. Das heißt, möchte man alle Zeichenfolgen „Sport“ finden, denen die Zeichenfolge „verein“ folgt, ohne dass jedoch die gefundene Zeichenfolge die Zeichenfolge „verein“ selbst enthält, wäre dies mit einer look-ahead assertion möglich: Sport(?=verein). Im Beispielsatz „Ein Sportler betreibt Sport im Sportverein.“ würde jener reguläre Ausdruck also zum letzten Vorkommen von „Sport“ passen, da nur diesem die Zeichenfolge „verein“ folgt; er würde jedoch nicht zur Teilzeichenkette „Sportverein“ passen.

Aufgrund der Eigenschaft, dass der angegebene Kontext (im Beispiel „verein“) zwar angegeben wird, jedoch kein expliziter Bestandteil der passenden Zeichenkette (hier „Sport“) ist, wird im Zusammenhang mit assertions meist das Attribut zero-width mitgenannt. Die vollständigen Bezeichnungen lauten somit – je nachdem, ob ein bestimmter Kontext gefordert (positiv) oder verboten (negativ) ist – zero-width positive/negative look-ahead/behind assertions. Die Bezeichnungen der Richtungen rühren daher, dass Regexp-Parser eine Zeichenkette immer von links nach rechts abarbeiten.

Definition Bezeichnung Erklärung Schreibweise
(?=Ausdruck) positive look-ahead assertion Ausdruck muss auf vorgenannten Ausdruck folgen Ausdruck(?=Ausdruck)
(?!Ausdruck) negative look-ahead assertion Ausdruck darf nicht auf vorgenannten Ausdruck folgen Ausdruck(?!Ausdruck)
(?<=Ausdruck) positive look-behind assertion Ausdruck muss nachfolgendem Ausdruck vorausgehen (?<=Ausdruck)Ausdruck
(?<!Ausdruck) negative look-behind assertion Ausdruck darf nachfolgendem Ausdruck nicht vorausgehen (?<!Ausdruck)Ausdruck

Look-arounds werden nicht nur von Perl und PCRE, sondern unter anderem auch von Java, .NET und Python unterstützt. JavaScript interpretiert ab Version 1.5 positive und negative Look-Aheads.

Beispiel
\s(?=EUR) steht für ein „Whitespace“-Zeichen (d. h. Leerzeichen oder Tabulator), dem die Zeichenkette EUR folgt. Im Gegensatz zu \sEUR gehört hier EUR nicht zu einer passenden Zeichenkette (englisch: „matched character string“).

Inline modifiers

Einige Implementierungen (unter anderem PHP, Perl/PCRE, Python sowie die PowerShell-Operatoren -match und -replace) unterstützen eingebettete Modifikatoren:

(?Modifikatoren)Ausdruck Modifikatoren mit unbeschränktem Geltungsbereich.
(?Modifikatoren:Ausdruck) Modifikatoren mit auf den Ausdruck eingeschränktem Geltungsbereich.

Es können mehrere Modifikatoren hintereinander geschrieben werden, wobei voranstehende Minuszeichen (-) deren Wirkungen negieren. Verbreitete Modifikatoren sind:

i für Case-Insensitive, d. h. zwischen Groß- und Kleinschreibung wird nicht unterschieden.
m aktiviert multiline-Modus, d. h. ^ und $ treffen nicht nur auf den Anfang bzw. das Ende der Eingabe zu, sondern auch auf darin enthaltene Zeilenumbrüche.
s aktiviert singleline-Modus, d. h. ein Punkt (.) führt auch für Zeilenumbrüche zu einem Treffer.

Beispiele:

  • (?i)i als auch (?i:i) finden jeweils in Iris zwei Treffer.
  • (?-i)i als auch (?-i:i) finden jeweils in Iris nur einen Treffer.

Bedingte Ausdrücke

Relativ wenig verbreitet sind bedingte Ausdrücke. Diese sind unter anderem in Perl, PCRE und dem .Net-Framework einsetzbar. Python bietet für solche Ausdrücke im Zusammenhang mit Look-around assertions nur eingeschränkte Funktionalität.

(?(Bedingung)wahr-Ausdruck|falsch-Ausdruck) Wenn die Bedingung zutrifft, kommt der wahr-Ausdruck zur Anwendung, andernfalls der falsch-Ausdruck.

Ist der falsch-Ausdruck leer, so kann der senkrechte Strich (|) entfallen. Als Bedingung kann u. a. eine Look-around assertion oder die Nummer einer Gruppierung angegeben werden, die zutreffen muss, damit der wahr-Ausdruck Anwendung findet.

Beispiele

Ob die linke oder rechte Seite einer Alternative angewandt werden soll, lässt sich an eine Bedingung knüpfen: Auf die Zeichenkette abc treffen sowohl die regulären Ausdrücke (.b|a)c als auch (?(?=a).b|a)c zu; ebenso trifft darauf (a|.b)c zu, jedoch nicht (?(?=a)a|.b)c.
Mit den Ausdrücken (\()?\d+(?(1)\)) und (?(?=\()\(\d+\)|\d+) werden jeweils Zeichenfolgen wie 1, (2), 34 oder (567) getroffen, aber nicht (42 oder 3). Es soll nicht unerwähnt bleiben, dass sich im vorliegenden Fall mittels der einfachen Alternative \(\d+\)|\d+ das gleiche Ergebnis erzielen lässt.

Beispiele

Die folgende Tabelle zeigt einige reguläre Ausdrücke und jeweils dazu passende Zeichenketten:

Regulärer Ausdruck Passende Zeichenketten
hello hello
gray|grey gray, grey
gr(a|e)y gray, grey
gr[ae]y gray, grey
b[aeiou]bble babble, bebble, bibble, bobble, bubble
[b-chm-pP]at|ot bat, cat, hat, mat, nat, oat, pat, Pat, ot
colou?r color, colour
rege(x(es)?|xps?) regex, regexes, regexp, regexps
go*gle ggle, gogle, google, gooogle, ...
go+gle gogle, google, gooogle, ...
g(oog)+le google, googoogle, googoogoogle, ...
z{3} zzz
z{3,6} zzz, zzzz, zzzzz, zzzzzz
z{3,} zzz, zzzz, zzzzz, ...
Hello\nworld Hello
world

Literatur

Reguläre Ausdrücke

  • Jeffrey Friedl: Reguläre Ausdrücke. O’Reilly, ISBN 3-89721-720-1. online
  • Tony Stubblebine: Reguläre Ausdrücke – kurz und gut. O’Reilly, ISBN 3-89721-264-1.
  • Mehran Habibi: Real World Regular Expressions with Java 1.4. Springer, ISBN 1-59059-107-0.
  • Jan Goyvaerts, Steven Leviathan: Reguläre Ausdrücke Kochbuch. O’Reilly, ISBN 978-3-89721-957-1.
  • Michael Fitzgerald: Introducing Regular Expressions O’Reilly, ISBN 978-1-4493-9268-0.

Reguläre Ausdrücke und natürliche Sprachen

  • Kenneth R. Beesley, Lauri Karttunen: Finite-State Morphology. Distributed for the Center for the Study of Language and Information. 2003. 2003 Series: (CSLI-SCL) Studies in Computational Linguistics.

Reguläre Ausdrücke und Automatentheorie

  • Jan Lunze: Ereignisdiskrete Systeme. Oldenbourg, 2006, ISBN 3-486-58071-X, S. 160–192.

Forschungsliteratur

  • Stephen C. Kleene: Representation of Events in Nerve Nets and Finite Automata. In: Claude E. Shannon, John McCarthy (Hrsg.): Automata Studies. Princeton University Press, 1956, S. 3–42.

Weblinks

  • POSIX Basic Regular Expressions bei Wikibooks (englisch)
  • POSIX Extended Regular Expressions bei Wikibooks (englisch)
  • Perl-Compatible Regular Expressions bei Wikibooks (englisch)
  • Reguläre Sprachen, reguläre Ausdrücke
  • Reguläre Ausdrücke ausprobieren
  • POSIX-Spezifikation für reguläre Ausdrücke (englisch)
  • Perl-Syntax regulärer Ausdrücke (englisch)
  • Regex-Kurs für Anfänger mit Übungen
  • Umfangreiche Anleitung zu regulären Ausdrücken und verschiedenen Implementierungen (englisch)

Software

  • Online visual regex tester
  • Online regex tester
  • Online regex tester – Visualisierung und schrittweise Nachverfolgung der Funktionsweise von regulären Ausdrücken (englisch)

Einzelnachweise

  1. Stephen C. Kleene: Representation of Events in Nerve Nets and Finite Automata. In: Claude E. Shannon, John McCarthy (Hrsg.): Automata Studies. Princeton University Press, 1956, S. 3–42. 
  2. Uwe Schöning: Theoretische Informatik - kurz gefasst. 5. Auflage. Spektrum Akademischer Verlag, Heidelberg 2009, ISBN 978-3-8274-1824-1, S. 28. 
  3. Alfred V. Aho, Ravi Sethi, Jeffrey Ullman: Compilers: Principles, Techniques and Tools. Addison-Wesley, 1986
  4. John E. Hopcroft, Jeffry D. Ullman: Einführung in die Automatentheorie, formale Sprachen und Komplexitätstheorie. Addison-Wesley, Bonn 1994, ISBN 3-89319-744-3. 
  5. Jacques Sakarovitch: The Language, the Expression, and the (Small) Automaton. In: LNCS. 3845. Jahrgang, 2006, S. 15–30, doi:10.1007/11605157_2. 
  6. POSIX-Spezifikationen
  7. RE Bracket Expression, IEEE Std 1003.1, The Open Group Base Specifications, 2004
  8. Regex Tutorial - Lookahead and Lookbehind Zero-Length Assertions. Abgerufen am 22. Juni 2024. 
  9. New in JavaScript 1.5 - JavaScript | MDN. 29. August 2014, abgerufen am 22. Juni 2024. 
  10. Regex Tutorial - If-Then-Else Conditionals. Abgerufen am 22. Juni 2024. 
  11. regex. Abgerufen am 22. Juni 2024. 
Normdaten (Sachbegriff): GND: 4506116-6 (GND Explorer, lobid, OGND, AKS)

Autor: www.NiNa.Az

Veröffentlichungsdatum: 18 Jul 2025 / 14:07

wikipedia, wiki, deutsches, deutschland, buch, bücher, bibliothek artikel lesen, herunterladen kostenlos kostenloser herunterladen, MP3, Video, MP4, 3GP, JPG, JPEG, GIF, PNG, Bild, Musik, Lied, Film, Buch, Spiel, Spiele, Mobiltelefon, Mobil, Telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, komputer, Informationen zu Regulärer Ausdruck, Was ist Regulärer Ausdruck? Was bedeutet Regulärer Ausdruck?

Ein regularer Ausdruck englisch regular expression Abkurzung RegExp oder Regex ist in der theoretischen Informatik eine Zeichenkette die der Beschreibung von Mengen von Zeichenketten mit Hilfe bestimmter syntaktischer Regeln dient Neben Implementierungen in vielen Programmiersprachen verarbeiten auch viele Texteditoren regulare Ausdrucke in der Funktion Suchen und Ersetzen Ein einfacher Anwendungsfall von regularen Ausdrucken sind Wildcards Regulare Ausdrucke konnen als Filterkriterien in der Textsuche verwendet werden indem der Text mit dem Muster des regularen Ausdrucks abgeglichen wird Dieser Vorgang wird auch Pattern Matching genannt So ist es beispielsweise moglich alle Worter aus einer Wortliste herauszusuchen die mit S beginnen und auf D enden ohne die dazwischen liegenden Buchstaben oder deren Anzahl explizit vorgeben zu mussen Der Begriff des regularen Ausdrucks geht im Wesentlichen auf den Mathematiker Stephen Kleene zuruck der die ahnliche Bezeichnung regulare Menge verwendete Regulare Ausdrucke in der theoretischen InformatikTheoretische Grundlagen Regulare Ausdrucke sind spezielle Formeln die regulare Sprachen beschreiben konnen Diese regularen Sprachen befinden sich auf der untersten Stufe der Chomsky Hierarchie Typ 3 Sie werden durch regulare Grammatiken erzeugt Zu jedem regularen Ausdruck existiert ein endlicher Automat der die vom Ausdruck spezifizierte Sprache akzeptiert Ein entsprechender nichtdeterministischer endlicher Automat kann mit der Thompson Konstruktion aus einem regularen Ausdruck konstruiert werden Daraus folgt die relativ einfache Implementierbarkeit regularer Ausdrucke Umgekehrt existiert zu jedem endlichen Automaten ein regularer Ausdruck der die vom Automaten akzeptierte Sprache beschreibt Ein entsprechender regularer Ausdruck kann mit Kleenes Algorithmus aus einem nichtdeterministischen endlichen Automaten konstruiert werden Kleenes Algorithmus erzeugt meist sehr lange regulare Ausdrucke Die Zustands Elimination deutsch eigentlich Zustands Eliminierung liefert in der Praxis meist kurzere regulare Ausdrucke Im schlimmsten Fall englisch worst case liefern jedoch beide Algorithmen regulare Ausdrucke der Lange S 4 Q displaystyle Sigma 4 Q wobei S displaystyle Sigma die Anzahl der Zeichen des zugrundeliegenden Alphabets und Q displaystyle Q die Anzahl der Zustande im Automaten bezeichnen Syntax Die Syntax definiert genau wie regulare Ausdrucke aussehen Regulare Ausdrucke sind immer uber einer vorgegebenen endlichen Zeichenmenge S displaystyle Sigma definiert dem sogenannten Alphabet Regulare Ausdrucke basieren auf genau drei Operationen Alternative Verkettung und Wiederholung Die formale Definition sieht folgendermassen aus displaystyle varnothing das spezielle Symbol fur die leere Menge ist ein regularer Ausdruck fur alle a S displaystyle a in Sigma ist a displaystyle a die Reprasentation eines Zeichens aus dem zugrunde liegenden Alphabet ein regularer Ausdruck Sind x displaystyle x und y displaystyle y regulare Ausdrucke so sind auch x y displaystyle x y Alternative xy displaystyle xy Verkettung und x displaystyle x Kleenesche Hulle Kleene Stern regulare Ausdrucke Fur Alternative wird statt displaystyle auch das Symbol displaystyle verwendet Man schreibt dann x y displaystyle x y Fur die Verkettung Konkatenation gibt es alternativ auch ein Operatorsymbol man schreibt dann x y displaystyle x cdot y Man kann auch zusatzliche Konstanten und Operationen erlauben sofern sich ihre Wirkung auch mit den oben genannten Grundregeln beschreiben liesse So findet man in der Literatur unter anderem auch ϵ displaystyle epsilon als regularen Ausdruck oder die positive Kleenesche Hulle x displaystyle x die als Abkurzung von x x displaystyle x x betrachtet werden kann Gibt man eine Rangfolge der Operatoren an kann man auf einige Klammern verzichten Die Rangfolge ist ublicherweise Kleene Stern vor Konkatenation vor Alternative Statt ab c displaystyle ab c genugt dann die Schreibweise ab c displaystyle ab c Die Anzahl der verschachtelten Operatoren wird als Sternhohe bezeichnet Semantik Die Semantik regularer Ausdrucke definiert genau welche formale Bedeutung die Syntax regularer Ausdrucke hat Ein regularer Ausdruck beschreibt eine formale Sprache also eine Menge von Wortern Zeichenketten Die Definition der Semantik lasst sich analog zur Syntaxdefinition beschreiben Dabei bezeichnet L r displaystyle mathcal L r die formale Sprache die durch den regularen Ausdruck r displaystyle r spezifiziert wird L displaystyle mathcal L varnothing emptyset Das Symbol fur die leere Menge spezifiziert die leere Sprache fur alle a S displaystyle a in Sigma gilt L a a displaystyle mathcal L a a Jeder Reprasentant eines Zeichens aus dem Alphabet spezifiziert die Sprache die nur das Wort der Lange eins mit diesem Zeichen enthalt sind x displaystyle x und y displaystyle y regulare Ausdrucke so gilt L x y L x L y displaystyle mathcal L x y mathcal L x cup mathcal L y Die Alternative zwischen zwei Ausdrucken beschreibt die Sprache die aus der Vereinigung der zwei Sprachen entsteht die durch die beiden Ausdrucke beschrieben werden L xy ab a L x b L y displaystyle mathcal L xy alpha beta alpha in mathcal L x land beta in mathcal L y Die Konkatenation zweier Ausdrucke beschreibt die Sprache die nur die Worter enthalt die ein Wort aus der vom ersten Ausdruck beschriebenen Sprache als Prafix haben und deren unmittelbar folgendes Rest Suffix ein Wort aus der vom zweiten Ausdruck beschriebenen Sprache ist L x a1 an n N0 a1 an L x displaystyle mathcal L x alpha 1 dots alpha n n in mathbb N 0 alpha 1 dots alpha n in mathcal L x Die kleenesche Hulle eines regularen Ausdrucks x displaystyle x beschreibt die Sprache mit jenen Wortern die durch Aneinanderreihen beliebiger Worter der durch x displaystyle x beschriebenen Sprache entstehen Enthalt die Syntaxdefinition regularer Ausdrucke auch die Konstante ϵ displaystyle epsilon so ist deren Bedeutung definiert als L ϵ e displaystyle mathcal L epsilon varepsilon also die Sprache die nur das leere Wort e displaystyle varepsilon enthalt Das leere Wort ist ein Wort einer formalen Sprache e S displaystyle varepsilon in Sigma und somit kein regularer Ausdruck Die Sprache die nur das leere Wort enthalt lasst sich aber auch ohne die Konstante ϵ displaystyle epsilon durch einen regularen Ausdruck beschreiben zum Beispiel displaystyle varnothing Es wird jedoch nicht immer optisch zwischen einem regularen Ausdruck und der zugehorigen Sprache unterschieden sodass man statt a displaystyle mathbf a auch a displaystyle a als regularen Ausdruck fur die Sprache a displaystyle a verwendet ebenso kann die Unterscheidung zwischen displaystyle varnothing und displaystyle emptyset sowie zwischen ϵ displaystyle epsilon und e displaystyle varepsilon entfallen Beispiele Wenn das Alphabet aus den Buchstaben a displaystyle a b displaystyle b und c displaystyle c besteht also S a b c displaystyle Sigma a b c dann lassen sich die folgenden Sprachen mit den entsprechenden regularen Ausdrucken beschreiben Die Sprache aller Worter die aus beliebig vielen a displaystyle a oder aus beliebig vielen b displaystyle b bestehen Syntax regex a b displaystyle mathrm regex mathbf a mathbf b Semantik L regex a b displaystyle mathcal L mathrm regex a cup b Die Sprache aller Worter die mit a displaystyle a anfangen und mit beliebig vielen b displaystyle b oder beliebig vielen c displaystyle c enden Syntax regex a b c displaystyle mathrm regex mathbf a mathbf b mathbf c Semantik L regex af f b c displaystyle mathcal L mathrm regex a varphi vert varphi in b cup c Die Sprache aller Worter die mit a displaystyle a anfangen und mit einer beliebigen Folge aus den Zeichen a b c displaystyle a b c enden Syntax regex a a b c displaystyle mathrm regex mathbf a mathbf a mathbf b mathbf c Semantik L regex af f S displaystyle mathcal L mathrm regex a varphi vert varphi in Sigma Die Sprache aller Worter die zwei Zeichen lang sind und aus den Zeichen a displaystyle a und b displaystyle b bestehen Syntax regex a b a b displaystyle mathrm regex mathbf a mathbf b mathbf a mathbf b Semantik L regex psf ps f a b aa ab ba bb displaystyle mathcal L mathrm regex psi varphi vert psi varphi in a b aa ab ba bb Die Sprache aller Worter die aus beliebig vielen Teilwortern ab displaystyle ab bestehen Syntax regex ab displaystyle mathrm regex mathbf a mathbf b Semantik L regex ab ϵ ab abab ababab displaystyle mathcal L mathrm regex ab epsilon ab abab ababab cdots Anwendung regularer AusdruckeKen Thompson nutzte diese Notation in den 1960er Jahren um qed eine Vorgangerversion des Unix Editors ed zu bauen und spater das Werkzeug grep zu schreiben Seither implementieren sehr viele Programme und Bibliotheken von Programmiersprachen Funktionen um regulare Ausdrucke zum Suchen und Ersetzen von Zeichenketten zu nutzen Beispiele dafur sind die Programme sed grep emacs die Programmiersprachen Perl und Tcl und Standardbibliotheken der Programmiersprachen C C Java JavaScript Python PHP Ruby und das Net Framework Auch die Textverarbeitung und die Tabellenkalkulation des Office Paketes OpenOffice org bieten die Moglichkeit mit regularen Ausdrucken im Text zu suchen Zwischen verschiedenen Regexp Implementierungen gibt es Unterschiede in Funktionsumfang und Syntax In Programmiersprachen haben sich uberwiegend die Perl Compatible Regular Expressions PCRE durchgesetzt die sich an der Umsetzung in Perl 5 0 orientieren Daneben wird bei POSIX 2 zwischen grundlegenden regularen Ausdrucken basic regular expressions und erweiterten regularen Ausdrucken extended regular expressions unterschieden Einige Programme zum Beispiel der Texteditor Vim bieten die Moglichkeit zwischen verschiedenen Regexp Syntaxen hin und herzuschalten Regulare Ausdrucke spielen eine wichtige Rolle bei der lexikalischen Analyse von Quelltexten beispielsweise in Compilern oder zur Syntaxhervorhebung in Editoren Ein lexikalischer Scanner zerlegt den Quelltext mithilfe von regularen Ausdrucken in sogenannte Tokens Schlusselworter Operatoren Da es sich bei den meisten Programmiersprachen um kontextfreie Sprachen handelt sind regulare Ausdrucke nicht machtig genug um deren Syntax zu beschreiben Daher wird die bei Compilern folgende syntaktische Analyse in der Regel von einem separaten Programm dem Parser erledigt Regulare Ausdrucke spielen auch in der Bioinformatik eine Rolle Sie kommen in Proteindatenbanken zum Einsatz um Proteinmotive zu beschreiben Der regulare Ausdruck W x 9 11 VFY FYW x 6 7 GSTNE GSTQCR FYW R S A P beschreibt zum Beispiel eine Proteindomane in PROSITE Der obige regulare Ausdruck besagt Folgendes Am Anfang wahle die Aminosaure Tryptophan Einbuchstabencode W dann wahle 9 bis 11 Aminosauren frei aus dann wahle entweder V F oder Y dann wahle entweder F Y oder W dann wieder 6 bis 7 Aminosauren frei dann entweder G S T N oder E dann entweder G S T Q C oder R dann F Y oder W dann R dann S dann A dann P Regulare Ausdrucke in der PraxisDie meisten heutigen Implementierungen unterstutzen Erweiterungen wie zum Beispiel Ruckwartsreferenzen backreferences Hierbei handelt es sich nicht mehr um regulare Ausdrucke im Sinne der theoretischen Informatik denn die so erweiterten Ausdrucke beschreiben nicht mehr notwendigerweise Sprachen vom Typ 3 der Chomsky Hierarchie Die folgenden Syntaxbeschreibungen beziehen sich auf die Syntax der gangigen Implementierungen mit Erweiterungen sie entsprechen also nur teilweise der obigen Definition aus der theoretischen Informatik Eine haufige Anwendung regularer Ausdrucke besteht darin spezielle Zeichenketten in einer Menge von Zeichenketten zu finden Die im Folgenden angegebene Beschreibung ist eine oft benutzte Konvention um Konzepte wie Zeichenklasse Quantifizierung Verknupfung und Zusammenfassen konkret zu realisieren Hierbei wird ein regularer Ausdruck aus den Zeichen des zugrunde liegenden Alphabets in Kombination mit den Metazeichen teilweise kontextabhangig gebildet bei manchen Implementierungen auch lt Die Meta Eigenschaft eines Zeichens kann durch einen vorangestellten Ruckwartsstrich Backslash aufgehoben werden Alle ubrigen Zeichen des Alphabets stehen fur sich selbst Zeichenliterale Diejenigen Zeichen die direkt wortlich literal ubereinstimmen mussen werden auch direkt notiert Je nach System gibt es auch Moglichkeiten das Zeichen durch den Oktal oder Hexadezimalcode i ooo i bzw x i hh i oder die hexadezimale Unicode Position u i hhhh i anzugeben Ein Zeichen aus einer Auswahl Mit eckigen Klammern und lasst sich eine Zeichenauswahl definieren Der Ausdruck in eckigen Klammern steht dann fur genau ein Zeichen aus dieser Auswahl Innerhalb dieser Zeichenklassendefinitionen haben einige Symbole andere Bedeutungen als im normalen Kontext Teilweise ist die Bedeutung eines Symbols vom Kontext abhangig in dem es innerhalb der Klammern auftritt Beispielsweise bedeutet ein Zirkumflex am Anfang einer Zeichenklassendefinition dass die Zeichenklasse negiert bzw invertiert wird im Sinne der Komplementbildung Steht ein Zirkumflex jedoch irgendwo sonst in der Definition ist es wortlich literally zu verstehen Ebenfalls kontextabhangig ist die Bedeutung des Bindestrich Zeichens Zudem unterscheiden sich hier die Regexp Auswerter regex engines zum Beispiel POSIX und PCRE in einigen Punkten voneinander Steht ein Bindestrich zwischen zwei Zeichen in der Klassendefinition zum Beispiel a g so ist er als Bis Strich zu verstehen das heisst als Beschreibung eines Zeichenintervalls oder Zeichenbereichs bezuglich der ASCII Tabelle Das genannte Beispiel ware aquivalent zu abcdefg Am Anfang oder Ende einer Zeichenklasse stehende Bindestriche werden als das Zeichen selbst interpretiert Beispiele fur Zeichenauswahl b egh b eines der Zeichen e g oder h b 0 6 b eine Ziffer von 0 bis 6 Bindestriche sind Indikator fur einen Bereich b A Za z0 9 b ein beliebiger lateinischer Buchstabe oder eine beliebige Ziffer b a b ein beliebiges Zeichen ausser a am Anfang einer Zeichenklasse negiert selbige b A Z b b A Z b bzw b A Z a z b allerdings nicht gemass POSIX Auswahl enthalt auch den Bindestrich wenn er das erste oder das letzte Zeichen in der Aufzahlung einer Zeichenklasse ist bzw bei PCRE wenn seine Metafunktion innerhalb einer Auswahl durch einen vorangestellten Backslash aufgehoben wirdVordefinierte Zeichenklassen Es gibt vordefinierte Zeichenklassen die allerdings nicht von allen Implementierungen in gleicher Weise unterstutzt werden da sie lediglich Kurzformen sind und auch durch eine Zeichenauswahl beschrieben werden konnen Wichtige Zeichenklassen sind b d b digit eine Ziffer also 0 9 und evtl auch weitere Zahlzeichen in Unicode z B bengalische Ziffern b D b no digit ein Zeichen das keine Ziffer ist also d b w b word character ein Buchstabe eine Ziffer oder der Unterstrich also a zA Z 0 9 und evtl auch nicht lateinische Buchstaben z B Umlaute b W b no word character ein Zeichen das weder Buchstabe noch Zahl noch Unterstrich ist also w b s b whitespace meist zumindest das Leerzeichen und die Klasse der Steuerzeichen f n r t und v b S b no whitespace ein Zeichen das kein Whitespace ist also s Ein Punkt b b bedeutet dass an seinem Platz ein fast beliebiges Zeichen stehen kann Die meisten RegExp Implementierungen sehen standardmassig Zeilenumbruche nicht als beliebiges Zeichen an jedoch kann dieses in einigen Programmen mittels des sogenannten Single Line Modifiers s zum Beispiel in foo bar s erreicht werden In vielen neueren Implementierungen konnen innerhalb der eckigen Klammern nach POSIX auch Klassen angegeben werden die selbst wiederum eckige Klammern enthalten Sie lauten beispielsweise Beispiele fur Zeichenklassen hierarchisch sortiert b cntrl b Steuerzeichen Im ASCII sind das die Zeichen 00 bis 1F und 7F DEL b print b Druckbare Zeichen alnum punct und Leerzeichen b space b Whitespace Horizontales und vertikales Tabulatorzeichen Zeilen und Seitenvorschub Wagenrucklauf und Leerzeichen ZK1 b blank b Leerzeichen oder Tabulatorzeichen b graph b Graphische Zeichen alnum oder punct b punct b Satzzeichen unter anderem Interpunktionszeichen Anfuhrungszeichen oder Unterstriche b alnum b Alphanumerische Zeichen alpha oder digit b xdigit b Hexadezimale Ziffern 0 bis 9 A bis F a bis f b digit b Die Ziffern 0 bis 9 b alpha b Buchstaben lower oder upper b lower b Kleinbuchstaben ZK2 nicht notwendigerweise nur von a bis z b upper b Grossbuchstaben ZK2 nicht notwendigerweise nur von A bis ZAnmerkungen ZK1 Das auch als geschutztes Leerzeichen bekannte Zeichen mit der Unicode Nummer 160 hex A0 entspricht dem HTML Entity amp nbsp wird von der Klasse space moglicherweise nicht gefunden und muss separat anhand des Codepoints identifiziert werden ZK2 Was Buchstaben sind ist in ublichen Betriebssystemen locale abhangig also abhangig von der eingestellten Region und Sprache Quantoren Quantoren englisch quantifier auch Quantifizierer oder Wiederholungsfaktoren erlauben es den vorherigen Ausdruck in verschiedener Vielfachheit in der Zeichenkette zuzulassen b span style color darkgreen i min i span span style color darkgreen i max i span b Der voranstehende Ausdruck muss mindestens min mal und darf maximal max mal vorkommen b span style color darkgreen i n i span b Der voranstehende Ausdruck muss exakt n mal vorkommen Dies entspricht b i n i i n i b b 0 span style color darkgreen i max i span b Der voranstehende Ausdruck darf maximal max mal vorkommen b span style color darkgreen i min i span b Der voranstehende Ausdruck muss mindestens min mal vorkommen b b Der voranstehende Ausdruck kommt kein oder einmal vor er ist optional Dies entspricht b 0 1 b b b Der voranstehende Ausdruck muss mindestens einmal vorkommen darf aber auch mehrfach vorkommen Dies entspricht b 1 b b b Der voranstehende Ausdruck darf beliebig oft auch keinmal vorkommen Dies entspricht b 0 b Die Quantoren beziehen sich dabei auf den vorhergehenden regularen Ausdruck jedoch nicht zwangslaufig auf die durch ihn gefundene Ubereinstimmung So wird zwar zum Beispiel durch a ein a oder auch aaaa vertreten jedoch entspricht 0 9 nicht nur sich wiederholenden gleichen Ziffern sondern auch Folgen gemischter Ziffern beispielsweise 072345 Weitere Beispiele sind ab entspricht a b aa bbaab etc 0 9 2 5 entspricht zwei drei vier oder funf Ziffern in Folge z B 42 oder 54072 jedoch nicht den Zeichenfolgen 0 1 1 oder a1a1 Soll eine Zeichenkette nur aus dem gesuchten Muster bestehen und es nicht nur enthalten so muss in den meisten Implementierungen explizit definiert werden dass das Muster vom Anfang A oder QF1 bis zum Ende der Zeichenkette Z z oder QF1 reichen soll Andernfalls erkennt zum Beispiel 0 9 2 5 auch bei der Zeichenkette 1234507 die Teilzeichenkette 12345 Aus dem gleichen Grund ergabe beispielsweise a immer einen Treffer da jede Zeichenfolge insbesondere das leere Wort mindestens 0 mal das Zeichen a enthalt Quantoren sind standardmassig gierig englisch greedy implementiert Das heisst ein regularer Ausdruck wird zur grosstmoglichen Ubereinstimmung aufgelost Da dieses Verhalten jedoch nicht immer so gewollt ist lassen sich bei vielen neueren Implementierungen Quantoren als genugsam oder zuruckhaltend englisch non greedy reluctant deklarieren Zum Beispiel wird in Perl oder tcl hierfur dem Quantor ein Fragezeichen nachgestellt Die Implementierung von genugsamen Quantoren ist vergleichsweise aufwendig und wahrend des Suchvorgangs langsam erfordert Backtracking weshalb manche Implementierungen diese ausdrucklich vermeiden z B sed Beispiel Perl Syntax Angenommen es wird der regulare Ausdruck b A B b auf die Zeichenfolge ABCDEB angewendet so wurde er sie als ABCDEB finden Mit Hilfe des genugsamen Quantors passt der nun modifizierte Ausdruck also b A B b nur die Zeichenkette AB bricht also die Suche nach dem ersten gefundenen B ab Ein gleichwertiger regularer Ausdruck fur Interpreter die diesen Quantor nicht unterstutzen ware A B B QF1 Die Zeichen und passen im multiline Modus zusammen also wenn der m Modifier gesetzt wird auch Zeilenanfange und enden Possessives Verhalten Eine Variante des oben beschriebenen gierigen Verhaltens ist das possessive matching Da hierbei jedoch das Backtracking verhindert wird werden einmal ubereinstimmende Zeichen nicht wieder freigegeben Daher finden sich in der Literatur auch die synonymen Bezeichnungen atomic grouping independent subexpression oder non backtracking subpattern Die Syntax fur diese Konstrukte variiert bei den verschiedenen Programmiersprachen Ursprunglich wurden solche Teilausdrucke englisch subpattern in Perl durch b gt b span style color darkgreen i Ausdruck i span b b formuliert Daneben existieren seit Perl 5 10 die aquivalenten in Java bereits ublichen possessiven Quantoren und i min i i max i Beispiel Angenommen es wird auf die Zeichenfolge ABCDEB der regulare Ausdruck b A B b angewendet so fande er keine Ubereinstimmung Bei der Abarbeitung des regularen Ausdrucks wurde der Teil b b bis zum Ende der Zeichenkette ubereinstimmen Um jedoch den gesamten Ausdruck zu finden musste ein Zeichen hier also das B wieder freigegeben werden Der possessive Quantor verbietet dies aufgrund des unterdruckten Backtrackings weshalb keine erfolgreiche Ubereinstimmung gefunden werden kann Gruppierungen und Ruckwartsreferenzen Ausdrucke lassen sich mit runden Klammern und zusammenfassen Etwa erlaubt abc ein abc oder ein abcabc etc Wortlich gemeinte Klammern kann man mit und benennen Bei manchen Implementationen ist es umgekehrt in jedem Fall sind aber runde Klammern innerhalb von Zeichenklassen immer wortlich Einige Implementierungen speichern die gefundenen Ubereinstimmungen von Gruppierungen ab und ermoglichen deren Wiederverwendung im regularen Ausdruck oder bei der Textersetzung Diese werden Ruckwartsreferenzen englisch back references genannt Haufig wird dazu die Schreibweise i n i oder i n i verwendet wobei n die Ubereinstimmung der n ten Gruppierung entspricht Eine Sonderstellung stellt dabei n 0 dar das meist fur die Ubereinstimmung des gesamten regularen Ausdrucks steht Beispiel Ein Suchen und Ersetzen mit b AA BB b als regularem Suchausdruck und b 1 b als Ersetzung ersetzt alle Zeichenketten die von AA und BB eingeschlossen sind durch den zwischen AA und BB enthaltenen Text Das heisst AA und BB und der Text dazwischen werden ersetzt durch den Text der ursprunglich zwischen AA und BB stand also fehlen AA und BB im Ergebnis Interpreter von regularen Ausdrucken die Ruckwartsreferenzen im Suchmuster zulassen entsprechen nicht mehr dem Typ 3 der Chomsky Hierarchie Mit dem Pumping Lemma lasst sich zeigen dass ein regularer Ausdruck der feststellt ob in einer Zeichenkette vor und nach der 1 die gleiche Anzahl von 0 steht keine regulare Sprache ist Daneben gibt es auch noch Gruppierungen die keine Ruckwartsreferenz erzeugen englisch non capturing Die Syntax dafur lautet in den meisten Implementierungen Regexp Dokumentationen weisen darauf hin dass die Erzeugung von Ruckwartsreferenzen stets vermieden werden soll wenn kein spaterer Zugriff auf sie erfolge Denn die Erzeugung der Referenzen kostet Ausfuhrungszeit und belegt Platz zur Speicherung der gefundenen Ubereinstimmung Zudem lassen die Implementationen nur eine begrenzte Anzahl an Ruckwartsreferenzen zu haufig nur maximal 9 Beispiel Mit dem regularen Ausdruck d d konnen Folgen von durch Bindestriche getrennten Zahlenfolgen gefunden werden ohne dabei die letzte durch einen Bindestrich getrennte Zahlenfolge als Ruckreferenz zu erhalten Beispiel Ein Datum im Format MM DD YYYY soll in das Format YYYY MM DD uberfuhrt werden Mit Hilfe des Ausdrucks 0 1 0 9 0 3 0 9 0 9 4 werden die drei Zahlengruppen extrahiert Mit dem Ersetzungs Ausdruck 3 1 2 werden die einzelnen Gruppen in das richtige Format uberfuhrt Alternativen Man kann alternative Ausdrucke mit dem Symbol zulassen Beispiel ABC abc bedeutet ABC oder abc aber z B nicht Abc Weitere Zeichen Um die oft auf Zeichenketten bezogenen Anwendungen auf dem Computer zu unterstutzen werden in der Regel zusatzlich zu den bereits genannten die folgenden Zeichen definiert b b steht fur den Zeilenanfang nicht zu verwechseln mit bei der Zeichenauswahl mittels und b b kann je nach Kontext fur das Zeilen oder Zeichenketten Ende stehen wobei bei manchen Implementierungen noch ein n folgen darf Das tatsachliche Ende passt zu z b b hebt gegebenenfalls die Metabedeutung des nachsten Zeichens auf siehe Maskierungszeichen Beispielsweise lasst der Ausdruck A die Zeichenketten A A A usw zu Auf diese Weise lasst sich auch ein Punkt mit suchen wahrend nach mit gesucht wird b b b leere Zeichenkette am Wortanfang oder am Wortende b B b leere Zeichenkette die nicht den Anfang oder das Ende eines Wortes bildet b lt b leere Zeichenkette am Wortanfang b gt b leere Zeichenkette am Wortende b n b ein Zeilenumbruch im Unix Format b r b ein Zeilenumbruch im alten d h vor dem Jahr 1999 Mac Format b r n b ein Zeilenumbruch im DOS und Windows Format b t b ein Horizontal TabulatorzeichenBeispiel bedeutet Die Zeichenkette muss aus mindestens einem Zeichen bestehen und das letzte Zeichen darf kein Leerzeichen sein Look around assertions Perl Version 5 fuhrte zusatzlich zu den ublichen regularen Ausdrucken auch look ahead und look behind assertions etwa vorausschauende bzw nach hinten schauende Annahmen oder Behauptungen ein was unter dem Begriff look around assertions zusammengefasst wird Diese Konstrukte erweitern die regularen Ausdrucke um die Moglichkeit kontextabhangige englisch context sensitive Bedingungen zu formulieren ohne den Kontext selbst als passend zu finden Das heisst mochte man alle Zeichenfolgen Sport finden denen die Zeichenfolge verein folgt ohne dass jedoch die gefundene Zeichenfolge die Zeichenfolge verein selbst enthalt ware dies mit einer look ahead assertion moglich Sport verein Im Beispielsatz Ein Sportler betreibt Sport im Sportverein wurde jener regulare Ausdruck also zum letzten Vorkommen von Sport passen da nur diesem die Zeichenfolge verein folgt er wurde jedoch nicht zur Teilzeichenkette Sportverein passen Aufgrund der Eigenschaft dass der angegebene Kontext im Beispiel verein zwar angegeben wird jedoch kein expliziter Bestandteil der passenden Zeichenkette hier Sport ist wird im Zusammenhang mit assertions meist das Attribut zero width mitgenannt Die vollstandigen Bezeichnungen lauten somit je nachdem ob ein bestimmter Kontext gefordert positiv oder verboten negativ ist zero width positive negative look ahead behind assertions Die Bezeichnungen der Richtungen ruhren daher dass Regexp Parser eine Zeichenkette immer von links nach rechts abarbeiten Definition Bezeichnung Erklarung Schreibweise b b span style color darkgreen i Ausdruck i span b b positive look ahead assertion Ausdruck muss auf vorgenannten Ausdruck folgen b Ausdruck b span style color darkgreen i Ausdruck i span b b span style color darkgreen i Ausdruck i span b b negative look ahead assertion Ausdruck darf nicht auf vorgenannten Ausdruck folgen b Ausdruck b span style color darkgreen i Ausdruck i span b lt b span style color darkgreen i Ausdruck i span b b positive look behind assertion Ausdruck muss nachfolgendem Ausdruck vorausgehen lt span style color darkgreen i Ausdruck i span b Ausdruck b b lt b span style color darkgreen i Ausdruck i span b b negative look behind assertion Ausdruck darf nachfolgendem Ausdruck nicht vorausgehen lt span style color darkgreen i Ausdruck i span b Ausdruck b Look arounds werden nicht nur von Perl und PCRE sondern unter anderem auch von Java NET und Python unterstutzt JavaScript interpretiert ab Version 1 5 positive und negative Look Aheads Beispiel s EUR steht fur ein Whitespace Zeichen d h Leerzeichen oder Tabulator dem die Zeichenkette EUR folgt Im Gegensatz zu sEUR gehort hier EUR nicht zu einer passenden Zeichenkette englisch matched character string Inline modifiers Einige Implementierungen unter anderem PHP Perl PCRE Python sowie die PowerShell Operatoren match und replace unterstutzen eingebettete Modifikatoren b b span style color darkgreen i Modifikatoren i span b b span style color darkgreen i Ausdruck i span Modifikatoren mit unbeschranktem Geltungsbereich b b span style color darkgreen i Modifikatoren i span b b span style color darkgreen i Ausdruck i span b b Modifikatoren mit auf den Ausdruck eingeschranktem Geltungsbereich Es konnen mehrere Modifikatoren hintereinander geschrieben werden wobei voranstehende Minuszeichen b b deren Wirkungen negieren Verbreitete Modifikatoren sind b i b fur Case Insensitive d h zwischen Gross und Kleinschreibung wird nicht unterschieden b m b aktiviert multiline Modus d h b b und b b treffen nicht nur auf den Anfang bzw das Ende der Eingabe zu sondern auch auf darin enthaltene Zeilenumbruche b s b aktiviert singleline Modus d h ein Punkt b b fuhrt auch fur Zeilenumbruche zu einem Treffer Beispiele i i als auch i i finden jeweils in b Iris b zwei Treffer i i als auch i i finden jeweils in b Iris b nur einen Treffer Bedingte Ausdrucke Relativ wenig verbreitet sind bedingte Ausdrucke Diese sind unter anderem in Perl PCRE und dem Net Framework einsetzbar Python bietet fur solche Ausdrucke im Zusammenhang mit Look around assertions nur eingeschrankte Funktionalitat b b span style color darkgreen i Bedingung i span b b span style color darkgreen i wahr Ausdruck i span b b span style color darkgreen i falsch Ausdruck i span b b Wenn die Bedingung zutrifft kommt der wahr Ausdruck zur Anwendung andernfalls der falsch Ausdruck Ist der falsch Ausdruck leer so kann der senkrechte Strich entfallen Als Bedingung kann u a eine Look around assertion oder die Nummer einer Gruppierung angegeben werden die zutreffen muss damit der wahr Ausdruck Anwendung findet Beispiele Ob die linke oder rechte Seite einer Alternative angewandt werden soll lasst sich an eine Bedingung knupfen Auf die Zeichenkette abc treffen sowohl die regularen Ausdrucke b a c als auch a b a c zu ebenso trifft darauf a b c zu jedoch nicht a a b c Mit den Ausdrucken d 1 und d d werden jeweils Zeichenfolgen wie 1 2 34 oder 567 getroffen aber nicht 42 oder 3 Es soll nicht unerwahnt bleiben dass sich im vorliegenden Fall mittels der einfachen Alternative d d das gleiche Ergebnis erzielen lasst BeispieleDie folgende Tabelle zeigt einige regulare Ausdrucke und jeweils dazu passende Zeichenketten Regularer Ausdruck Passende Zeichenketten b hello b hello b gray grey b gray grey b gr a e y b gray grey b gr ae y b gray grey b b aeiou bble b babble bebble bibble bobble bubble b b chm pP at ot b bat cat hat mat nat oat pat Pat ot b colou r b color colour b rege x es xps b regex regexes regexp regexps b go gle b ggle gogle google gooogle b go gle b gogle google gooogle b g oog le b google googoogle googoogoogle b z 3 b zzz b z 3 6 b zzz zzzz zzzzz zzzzzz b z 3 b zzz zzzz zzzzz b Hello nworld b Hello worldLiteraturRegulare Ausdrucke Jeffrey Friedl Regulare Ausdrucke O Reilly ISBN 3 89721 720 1 online Tony Stubblebine Regulare Ausdrucke kurz und gut O Reilly ISBN 3 89721 264 1 Mehran Habibi Real World Regular Expressions with Java 1 4 Springer ISBN 1 59059 107 0 Jan Goyvaerts Steven Leviathan Regulare Ausdrucke Kochbuch O Reilly ISBN 978 3 89721 957 1 Michael Fitzgerald Introducing Regular Expressions O Reilly ISBN 978 1 4493 9268 0 Regulare Ausdrucke und naturliche Sprachen Kenneth R Beesley Lauri Karttunen Finite State Morphology Distributed for the Center for the Study of Language and Information 2003 2003 Series CSLI SCL Studies in Computational Linguistics Regulare Ausdrucke und Automatentheorie Jan Lunze Ereignisdiskrete Systeme Oldenbourg 2006 ISBN 3 486 58071 X S 160 192 Forschungsliteratur Stephen C Kleene Representation of Events in Nerve Nets and Finite Automata In Claude E Shannon John McCarthy Hrsg Automata Studies Princeton University Press 1956 S 3 42 WeblinksPOSIX Basic Regular Expressions bei Wikibooks englisch POSIX Extended Regular Expressions bei Wikibooks englisch Perl Compatible Regular Expressions bei Wikibooks englisch Regulare Sprachen regulare Ausdrucke Regulare Ausdrucke ausprobieren POSIX Spezifikation fur regulare Ausdrucke englisch Perl Syntax regularer Ausdrucke englisch Regex Kurs fur Anfanger mit Ubungen Umfangreiche Anleitung zu regularen Ausdrucken und verschiedenen Implementierungen englisch Software Online visual regex tester Online regex tester Online regex tester Visualisierung und schrittweise Nachverfolgung der Funktionsweise von regularen Ausdrucken englisch EinzelnachweiseStephen C Kleene Representation of Events in Nerve Nets and Finite Automata In Claude E Shannon John McCarthy Hrsg Automata Studies Princeton University Press 1956 S 3 42 Uwe Schoning Theoretische Informatik kurz gefasst 5 Auflage Spektrum Akademischer Verlag Heidelberg 2009 ISBN 978 3 8274 1824 1 S 28 Alfred V Aho Ravi Sethi Jeffrey Ullman Compilers Principles Techniques and Tools Addison Wesley 1986 John E Hopcroft Jeffry D Ullman Einfuhrung in die Automatentheorie formale Sprachen und Komplexitatstheorie Addison Wesley Bonn 1994 ISBN 3 89319 744 3 Jacques Sakarovitch The Language the Expression and the Small Automaton In LNCS 3845 Jahrgang 2006 S 15 30 doi 10 1007 11605157 2 POSIX Spezifikationen RE Bracket Expression IEEE Std 1003 1 The Open Group Base Specifications 2004 Regex Tutorial Lookahead and Lookbehind Zero Length Assertions Abgerufen am 22 Juni 2024 New in JavaScript 1 5 JavaScript MDN 29 August 2014 abgerufen am 22 Juni 2024 Regex Tutorial If Then Else Conditionals Abgerufen am 22 Juni 2024 regex Abgerufen am 22 Juni 2024 Normdaten Sachbegriff GND 4506116 6 GND Explorer lobid OGND AKS

Neueste Artikel
  • Juli 18, 2025

    Thomas Schütte

  • Juli 18, 2025

    Thomas Köck

  • Juli 18, 2025

    Thomas Häßler

  • Juli 18, 2025

    Thomas Baumgärtel

  • Juli 18, 2025

    Thomas Nörber

www.NiNa.Az - Studio

    Kontaktieren Sie uns
    Sprachen
    Kontaktieren Sie uns
    DMCA Sitemap
    © 2019 nina.az - Alle Rechte vorbehalten.
    Copyright: Dadash Mammadov
    Eine kostenlose Website, die Daten- und Dateiaustausch aus der ganzen Welt ermöglicht.
    Spi.