Druckregler



Ein Regulars Ausdruck ( englisch regulärer Ausdruck , Abkürzung RegExp oder Regex ) ist in der Theoretischen Informatik Eine Zeichenkette , der Beschreibung von sterben Mengen von Zeichenketten mit Hilfe Bestimmt syntaktischer Regeln Dientes. Die Regulatorische Ausdrücke finden sich in der Softwareentwicklung Anwendung. NEBEN Implementierungen in vielen Programmiersprachen verarbeiten Auch viele Texteditoren Regulars Ausdrücke in der Funktion “ Suchen und Ersetzen“. Ein einacher Anwendungsfall von regulärem Ausdruck sind Wildcards .

Die Regulatorischen Ausdrücke wie das Filterkriterium in der Textsuche wurden verdorben, im Text enthalten sind sie mit dem Muster des regulären Abdrucks abgeglichen. Dieser Vorgang wird auch Pattern Matching gelesen. So ist es Möglich beispielsweise, alle Wort Aus einer Wortliste herauszusuchen, mit sterben S Anfänger und auf D Ende, ohne sterben Dazwischen liegend Buchstabe oder deren Anzahl Explizit vorgeben zu Müssen.

Der Begriff des Regulären Ausdruckes geht im Wesentlichen auf den Mathematiker Stephen Kleene zurück. Dieser verwendete eine schnelle Bezeichnung, die durch Mischen geregelt wurde. [1]

Reguläre Ausdrücke in der theoretischen Informatik

Theoretische Grundlagen

Reguläre Ausdrücke beschreiben Eine Familie von Form Ellen Sprachen und klanglichen DAMIT zum Theoretischen Informatik . This Sprachen, sterben regulares Sprachen , befinden sich auf der unter Stein und SOMIT ausdrucksschwächsten Stufe der Chomsky-Hierarchie (Typ 3). Sie wurden durch regelmäßige Grammatik geehrt .

Zu Jedem Regulars Ausdruck existiert eine endlich Maschine , wo sterben vom Ausdruck spezifizierte Sprache Akzeptiert. Eine entsprechend (nichtdeterministischer) ENDLICH Maschine Kann mit der Thompson Konstruktion [2]Aus einem regulares Ausdruck konstruiert Werden. Daraus folgt die relative Einfachheit der Implementierbarkeit regulärer Ausdrücke. Umgekehrt existiert zu Jedem Spender Endlich ein Regulars Ausdruck, vom Spender der Matrize Akzeptiert Sprache beschreibt. Ein entsprechend Regulares Ausdruck Kann mit Kleen Algorithmus [1] [3] Aus einer nichtdeterministischen ENDLICH Spendern konstruiert Werden. Kleenes Algorithmus erstellt sehr lange reguläre Ausdrücke. Die Zustands Elimination[3] (deutsch eigentlich: „Zustands-Eliminierung“) liegt in der Praxis eher kühlere reguläre Ausdrücke. Im Höchstfall (englisch „worst case“) liefern beide Algorithmen beide reguläre Ausdrücke der Länge{\ displaystyle | \ Sigma | 4 ^ {| Q |}}[4] , wobei{\ displaystyle | \ Sigma |} die Anzahl der Zeichen des Zugrundelgebenden Alphabete und {\ displaystyle | Q |} Die Anzahl der Zustände im Automaten bezeichnen.

Syntax

Die Syntax definiert Genua, die in der Regel ausgedrück ist.

Reguläre Ausdrücke sind immer über einen vorgegebenen Zeichenvorrat {\ displaystyle \ Sigma}Definiert, diese sogenannte Alphabet . Reguläre Ausdrücke drücken auf drei Operationen: Alternative, Verkettung und Wiederholung. Die formale Definition sieht folgender folgern aus:

  1. {\ displaystyle \ varnothing}(Das Spezielle Symbol für sterben Leere Menge ) Ist ein Regulars Ausdruck.
  2. für alle {\ displaystyle a_ {i} \ in \ Sigma} ist {\ displaystyle \ mathbf {a} _ {i}} (Die Abkürzung eines Zeichens aus dem zrrunden liegenden Alphabet) ein regulärer Ausdruck.
  3. Sind {\ displaystyle x} und {\ displaystyle y} Ausdrücke regulieren, so mind auch {\ displaystyle (x | y)} (Alternative), {\ displaystyle (xy)}( Verkettung ) und{\ displaystyle (x ^ {*})}( Kleenesche Hülle , Kleene-Stern) reguläre Ausdrucke.

Für Alternative wird statt {\ displaystyle |} auch das Symbol {\ displaystyle +}used. Mann schreit{\ displaystyle (x + y)}. Für die Verkettung (Konkatenation) gibt es alternativ auch ein Operator Symbol; Mann schreibt dann{\ displaystyle (x \ cdot y)}.

Sie wissen vielleicht, dass die Konstante und die Operationen, soweit Sie wissen, und Sie sind willkommen. Die Regel ist beschreibend. So findet man in der Literatur{\ displaystyle \ epsilon}als regulares Ausdruck [3] oder sterben positive Kleenesche Hülle{\ displaystyle x ^ {+}}, die als Abkürzung von {\ displaystyle (x (x ^ {*}))} wurden untersucht.

Gibt man eine Rangfolge der Operatoren an, kann man auf eine Klammern verzahnen. Die Rangfolge ist gewöhnlich Kleene-Stern vor Konkatenation vor Alternative . statt{\ displaystyle (((ab) | c) ^ {*})} genugt die Schreibweise {\ displaystyle (ab | c) ^ {*}}.

Die Anzahl der Ladegeräte * -Operatoren wird als Sternhöhe bezeichnet.

Semantik

Die Semantik-Regularien definieren genau, formale Bedeutung, die Syntax-Regulator-Ausdrücke.

Ein Regler Ausdruck beschreibt die formale Sprache, auch eine Menge von Wörtern (Zeichenketten). Die Definition des semantischen Reading Sich Analog Synth Syntax Definition. Dabei bezeichnet{\ displaystyle {\ mathcal {L}} (Regex)} die formale Sprache, die durch den regulären Ausdruck {\ displaystyle regex} spezifiziert wird.

  1. {\ displaystyle {\ mathcal {L}} (\ varnothing) = \ emptyset}
    Dieses spezielle Symbol für die Lehrer Männer spezifiziert die leere Sprache.
  2. für alle {\ displaystyle a_ {i} \ in \ Sigma} vergoldet {\ displaystyle {\ mathcal {L}} (\ mathbf {a} _ {i}} = \ {a_ {i} \}}
    Jedes Repräsentiert eines Zeichens aus dem Alphabet spezifiziert Sprache, wer nur dieses Zeichen enthält.
  3. Sind {\ displaystyle x} und {\ displaystyle y} Ausdrücke regeln, also gültig:
    • {\ displaystyle {\ mathcal {L}} (x | y) = {\ mathcal {L}} (x) \ tasse {\ mathcal {L}} (y)}
    Die Alternative Zwischen zwei Ausdrücken beschreibt Sprache zu sterben, sterben aus der Vereinigung der Zwei Sprachen entsteht, sterben Durch Die Beiden Ausdrücke beschrieben Werden.
    • {\ Display {\ mathcal {L}} (xy) = \ {\ alpha \ beta \; \ Host \; \ alpha \ in {\ mathcal {L}} (x) \ Land \ beta \ in {\ mathcal { L}} (y) \}}
    Die Konkatenation Zweier Ausdrücke beschreibt Sprache zu sterben, nur sterben worte Enthält, sterben ein Wort aus der vom Ersten Ausdruck beschriebenen Sprache als Präfix Haben und Derens unmittelbar Folgen Ruhe-Suffix ein Wort aus der vom Zweiten Ausdruck beschriebenen Sprache ist sterben.
    • {\ Display {\ mathcal {L}} (x ^ {*}) = \ cup _ {i \ GEQ 0} \; {\ mathcal {L}} ^ {i} (x)}
    Die kleenesche Hülle regulärer Ausdrücke beschreibt die kleeneschen Hüllen der {\ displaystyle x} geschriebene Sprache.

Enthold de Syntaxdefinition regulær Ausdrücke auch de Constant {\ displaystyle \ epsilon}, so wird Bedeutung definiert als {\ displaystyle {\ mathcal {L}} (\ epsilon) = \ {\ varepsilon \}}, auch die Sprache, das nur das leere Wort {\ displaystyle \ varepsilon} Enthält.

Ihr Lehrer Wort ist ein Wort einer Formalsprache{\ displaystyle \ varepsilon \ in \ Sigma ^ {*}}) und kein regulärer Ausdruck. Die Sprache, die nur das leere Wort enthält, läst sich aber auch ohne die Konstante{\ displaystyle \ epsilon} durch einen regulären Ausdruck beschreiben, zum Beispiel: {\ displaystyle \ varnothing ^ {*}}. Es wird jedoch nicht immer optisch between Einem Regulars Ausdruck und der zugehörigen Sprache Unterschieden, sodass man statt{\ displaystyle \ mathbf {a}} Auch {\ displaystyle a} als Stammkunden Ausdruck für die Sprache {\ displaystyle \ {a \}} verwöhnt, 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 {\ displaystyle a}. {\ displaystyle b} und {\ displaystyle c} so auch {\ displaystyle \ Sigma = \ {a, b, c \}}, gebildetes Schweißen die folgenden Sprachen mit den entsprechenden Regulars

  • Die Sprache der Wörter, die eingeschlafen ist {\ displaystyle a} oder glaubhaft gefallen {\ displaystyle b} Besteht:
    Syntax: {\ displaystyle regex = \ mathbf {a} ^ {*} | \ mathbf {b} ^ {*}}. semantik:{\ displaystyle {\ mathcal {L}} (Regex) = \ {a \} ^ {*} \ cup \ {b \} ^ {*}}
  • Die Sprache der Wörter, die mit {\ displaystyle a} Anfang:
    Syntax: {\ Display regex = \ mathbf {a} (\ mathbf {a} | \ mathbf {b} | \ mathbf {c}) ^ {*}}. semantik:{\ Display {\ mathcal {L}} (regex) = \ {a \ beta \; \ Host \; \ beta \ in \ Sigma ^ {*} \}}
  • Die Sprache der Wörter, die mit {\ displaystyle a} anfangen und ende und dazwischen nur aus {\ displaystyle c} besthen (oder nichts dazwischen Lügen):
    Syntax: {\ displaystyle \ mathbf {a} \ mathbf {c} ^ {*} \ mathbf {a}}. semantik:{\ Display {\ mathcal {L}} (regex) = \ {a \ beta a \; \ Host \; \ beta \ in \ {c \} ^ {*} \}}
  • Die Sprache der Wörter, die Zeichen zu behandeln weiß, aber kein {\ displaystyle c} enthalten:
    Syntax: {\ displaystyle (\ mathbf {a} | mathbf {b}) (\ mathbf {a} | \ mathbf {b})}. semantik:{\ Display {\ mathcal {L}} (regex) = \ {\ alpha \ beta \; \ Host \; \ alpha, \ beta \ in \ {a, b \} \}}

Anwendung reguläre Ausdrücke

Ken Thompson verwendete diese Notation in den 1960er Jahren, über qed (eine Vorgängerversion des Unix-Editors, Hrsg. ) Und die Späteren des Werkzeugs grep zu schreiben. Seither implementieren viele Programme und Bibliotheken von Programmersprachen Die Funktion, um zu regulieren . Beispiel Dafür Ist Das Programm sed , grep, Emacs , stirbt Programmiersprache Perl und Standardbibliotheken die Programmiersprachen C , C ++ , Java , JavaScript , Python , PHP, Ruby und das .NET -Framework. Auch sterben Textverarbeitung und sterben Tabellenkalkulation des Office – Paketes OpenOffice.org Bieten sterben möglichkeit, mit Regulars Ausdrücken im Text zu suchen.

Zwischen verschiedenen Regexp-Implementationen gibt es Unterschiede in Funktionsumfang und Syntax. In Programmierprogrammen finden Sie die Perl Compatible Regular Expressions (PCRE), die sich in Perl 5.0 befinden. Daneby wird bei POSIX.2 Zwischen „Basic Legends“ Regulars Ausdrücken (Basic Regular Expressions) und „erweiterten“ Regeln Ausdrücken (Extended Regular Expressions) unterschieden.

Einige Programme, zum beispiel des Texteditor Vim , Bieten stirbt möglichkeit, between Verschiedene Regexp-Syntax Hindernis und herzuschalten.

Reguläre Ausdrücke spielen Eine Wicht Rolle bei der lexikalischen Analyse von Quelltexten , beispielsweise in Compilern oder zur Syntaxhervorhebung in Editor. Ein lexikalischer Scanner zerlegt die Quelltext mithilfe von Regulars Ausdrücken in sogenannten Tokens (Schlüsselwort, Operator, …). Da es sich bei den meisten Programmiersprachen um kontextfrei Sprachen Handelt, Sind regulares Ausdrücke nicht macht genug, um Derens Syntax zu beschreiben. DAHER Wird bei Compilern folgende sterben Syntaktische Analyse in der Regel von Einem separaten Programm, insbesondere solche Parser , erledigt.

Regulierbare Ausdrücke spielen eine Rolle in der Bioinformatik eine Rolle. Hier finden Sie Proteindatenbanken zum Einsatz, Um Proteinmotiv zu schreiben. Dort regeln Ausdruck

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

beschreibt den Beispiel einer Proteindomäne in PROSITE . Wo regulares obiger Ausdruck besagt folgt: Am Anfang Wahle sterben Aminosäure Tryptophan (Einbuchstabencode W) Form Wahle 9 bis 11 Aminosäuren frei aus, Dann Wahle Entweder V, F oder Y, Dann Wahle Entweder F, Y oder W, wieder Dann 6 bis 7 Aminosäuren frei, Dann Entweder G, S, T, N oder E, G Dann Entweder, S, T, Q, C oder R Falztrichter F, Y oder W, R Dann Dann S Dann P. Forming

Reguläre Ausdrücke in der Praxis

Die meisten heute Implementierungen unterstützen Erweiterung Wie zum beispiel Rückwärtsreferenzen (Rückreferenzierungen). Hierbei Handelt es sich nicht mehr um regulares Ausdrücke im Sinne der theoretischen Informatik, denn sterben so erweiterten Ausdrücke beschreiben nicht mehr notwendigerweise Sprachen vom Typ 3 , wo Chomsky-Hierarchie .

Die following Syntaxbeschreibungen Beziehen sich auf sterben Syntax, wo einst Implementierungen mit Erweiterung, sie auch entsprechende Nur Teilweise wo obige Definition aus der theoretischen Informatik.

Eine Hauf anwendung Regulars Ausdrücke Besteht Darin, Spezielle Zeichenketten in Einer Menge von Zeichenketten zu FINDEN. Die im following angegebenen Beschreibung ist a (oft Benutzt) Konvention Mikron Konzepte Wie Zeichenklasse , Quantifizierung , Verknüpfung und Zusammenfassen Beton zu Realisiert. Hierbei Wird ein Regulars Ausdruck aus den Zeichen der zugrunde liegend Alphabete in Kombination mit den Metazeichen [ ] ( ) { } | ? + - * ^ $ \ . (Teilweise kontextabhängig) Gebildet, bei Mancha Implementierungen Auch : ! < =. Die Meta-Eigenschaft eines Zeichens kann zum Erstellen eines Rückwertsstrichs ( Backslash ) verwendet werden. Alle übrigen Zeichen des Alphabets stehen für sich selbst.

Zeichenliterale

Diejenichen Zeichen, die sofort gelesen (buchstäblich, wörtlich) übereineinstimmen mussten, wurden direkt notiert. Sie können mit diesen Dingen arbeiten, zB Zeichen durch den Oktal- oder Hexadezimalcode ( bzw. ) oder die hexadezimale Unicode-Position ( ) angeben. \ooo\xhh\uhhhh

Ein Zeichen aus einer Auswahl

Meine Eckigen Klammern lesen und definieren die Zeichenauswahl ( [und ]). Es ist ein Ausdruck in eckigen Klammern Steht gebildet für genau ein Zeichen aus dieser Auswahl. Innerhalb dieser Zeichenklanta-Definitionen gibt es nur ein Symbol, andere Bedeutungen als im normalen Kontext. Teilweise ist die Bedeutung eines Symbols vom Kontext, in dem sie innerhalb der Klammern auftritt.

Beispielhaft ist ein Zirkumflex ^ am Anfang einer Zeichenklanta definiert, wobei die Zeichenklasse negativ ist. invertiert wird (im Sinne der Komplementbildung ). Steht ein Zirkumflex irgendwo in der Definition, ist es wörtlich („wörtlich“) zu verstehen. Ebenfalls kontextabhängig ist die Bedeutung des Bindestrich-Zeichens ( -). In diesem Fall finden Sie die Regexp-Auswerter (im Beispiel POSIX und PCRE) nur in Veinanderpunkten. Steht einen Bindestrich -Zwischen zwei Zeichen in der Klassendefinition, zum beispiel [a-g], so ist ist als Bis-Strich zu verstehen, das heißt als Beschreibung Eines Zeichenintervall oder Zeichenbereich bezüglich wo ASCIITabelle. Dein Genie wäre äquivalent zu [abcdefg]. Am Anfang oder Ende einer Zeichenklasse stehende Bindestriche wurde 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 Gläubiger, ein spätantiker Buchstabe oder dein treuer Ziffer
[^a] ein Gläubiger Zeichen außer „a“ („am Anfang einer Zeichenklasse negiert selbige“)
[-A-Z][A-Z-](BZW. [A-Z\-a-z], allerdings nicht according POSIX) [5] Auswahl Enthält den Bindestrich auch „-„, ideal für die das erste oder das letzte Zeichen in der Aufzählung Wacholder Zeichenklasse ist BZW. bei PCRE, wenn seine Metafunktion im inneren Teil der Auswahl durch ein vorangeordnetes „“ Zeichen aufgehoben wird

Vordefinierte Zeichen-Klassen

Es Gibt vordefinierte Zeichenklassen, allerdings nicht von allen Implementierungen in Gleich Weise Unterstützt Werden, da sie Lediglich Kurzformen Sind und Auch Durch Eine sterben Zeichenauswahl beschrieben Werden Können. Wheat Zeichenklassen beachten:

\d d igit eine Ziffer, auch [0-9] (und evt. auch weitere Zahlzeichen in Unicode , z. B. Bengal Ziffern )
\D nicht d igit ein Zeichen, das ist keine Ziffer, auch [^ \ d]
\w w Wortzeichen Ein Buchstabe, eine Ziffer oder der Unterstrich, auch [a-zA-Z_0-9] (und evt. Auch niet-latein Buchstaben, z. B. Umlaute)
\W kein w Wortzeichen ein Zeichen, wieder Buchstabe weder Zahl noch Unterstrich ist, auch [^ \ w]
\s Weiß ‚s – Stimulation most moments of Leerzeichen und der Steuerzeichen \ f, \ n, \ r, \ t und \ v
\S kein weißer genaue Stimulations ein Zeichen, das kein Whitespace ist, auch [^ \ s]

Ein .Punkt ( ) bedeutet, dass sein Platz ein (schneller) Glaube ist. Die meisten RegExp Implementierungen Sehen standardmäßig Zeilenumbrüche nicht als Beliebers Zeichen ein, jedoch Kann of this in Einigen Prog Rahmen Profilierung mittels Dezember sogenannten einzeiligem -Modifiers s(zum beispiel in /foo.bar/s) erreicht Werden.

Teilweise können Implementierungen in der Mitte der eckigen Klammernach POSIX auch Klassen gegeben werden, die sich selbst wiederum eckige Klammern enthalten. Sie lauten beispielsweise:

Beispiele für Zeichenklassen, hierarchisch sortiert
  • [:cntrl:]– Steuerzeichen. Im ASCII sind Zeichen 00 bis 1F und 7F (DEL).
  • [:print:] – Druckbare Zeichen: [: alnum:], [: punct:] und Leerzeichen
    • [:space:]– Whitespace : Horizontaler und Vertaler Tabulator , Zeilen- und Seitenvorschub , Wagenrücklauf und Leerzeichen ZK1
      • [:blank:]– Leerzeichen oder Tab
    • [:graph:] – Grafische Zeichen: [: alnum:] oder [: punct:]
      • [:punct:]– Satzzeichen wer! „# $% & ‚() * +, -. /:; <=>? @ [\] ^ _` {|} ~
      • [:alnum:]– Alphanumerische Zeichen : [: alpha:] oder [: digit:]
        • [:xdigit:]– Hexadezimale Ziffern : 0 bis 9, Aa F, a bis f.
          • [:digit:] – Die Ziffern 0 bis 9
        • [:alpha:] – Buchstaben: [: niedriger:] oder [: oben:]
          • [:lower:]– Kleinbuchstaetten ZK2 : nicht notwendigerweise nur von a bis z
          • [:upper:]– Großbuchstaben ZK2 : nicht notwendigerweise nur von A bis Z
Anmerkung:

ZK1 das auch als “ Geschütztes Leerzeichen “ Bekannt Zeichen Mit der UnicodeNummer 160 (hex A0) (entspricht sie HTML – Entity & nbsp;) Wird von der Klasse [: space:] möglicherweise nicht gefunden und Durcheinander getrennt anhand DezemberKodierpunktes identifiziert Werden .
ZK2 War Buchstabe Ist, ist in Übliches Betriebssystem locale -abhängig, abhängig auch von der Region und Sprache eingestellten. [6]

Quantoren

Quantor (englisch quantifier , Auch Quantifizierer oder Wiederholungsfaktor ) erlaub es, die vorherige Ausdruck in verschiedener Vielfachheit in der Zeichenkette zuzulassen.

? Es voranstehende Ausdruck ist optional, ist Kann einmal vorkommen, braucht es aber nicht, das heißt, in dem Ausdruck kommt null oder einmal vor. (Stirbt 100 Jahre ) {0,1}
+ Es voranstehende Ausdruck Sich minde Freund einmal vorkommen, aber Darf Auch mehrfach vorkommen. (Stirbt 100 Jahre ) {1,}
* Der ehemalige Ausdruck stellt oft (auch keinmal) Gabelom dar. (Stirbt 100 Jahre ) {0,}
{n} Wo voranstehende Ausdruck Sie EXAKT n Vorlagen vorkommen. (Stirbt 100 Jahre ) {n,n}
{min,} Es gab eine Trauer um den Ausdruck meiner Gedanken.
{min,max} Es voranstehende Ausdruck Sie minde Freund meiner Vorlage maximal und Darf max Vorlage vorkommen.
{0,max} Es gibt keine maximale maximale Gabeltasche.

Der Quantor Beziehen sich dabei auf die vorhergehenden Regulars Ausdruck, jedoch nicht zwangsläufig auf sterben Durch IHN gefunden Übereinstimmung. So Wird Zwar zum beispiel Durch a+eine „a“ oder auch „AAAA“ Vertreter, jedoch Entspricht [0-9]+nicht nur sich wiederholende Gleichen Ziffern, Sondern Auch Folgen gemischte Ziffern, beispielsweise „072345“.

Weitere Beispiele sind:

  • [ab]+ Hundertjahrfeier „a“, „b“, „aa“, „bbaab“ usw.
  • [0-9]{2,5}zwei, drei, vier oder fünf Ziffern in Folge, z. B. „42“ oder „54072“, Sie und die Zeichenfolgen „0“, „1.1“ oder „a1a1“.

Soll Eine Zeichenkette nur aus dem Muster gesucht Bestehen (und es nicht nur enthalten), so in dem Durcheinander meisten Implementierungen Explizit Definiert Werden that das Muster vom Anfang ( \Aoder ^QF1 bis zum Ende der Zeichenkette ( \Z\zoder $QF1 reichen soll. Andere Fälle Erkennen zum beispiel [0-9]{2,5}Auch bei der Zeichenkette „1234507“ die Teilzeichenkette „12345“. Aus dem glitten chen Grunde ergäbe beispielsweise a*Immer einen Treffer, wenn JEDER Zeichenfolge – selbst das Leere Wort „“ – minde Freund 0-mal das Zeichen „a“ Enthält.

Quantor sind standardmässig „gierig“ (englisch gierig ) implementiert. Das heißt, ein regelmäßiger Ausdruck wird zur größtmöglichen Übereinstimmung aufgelöst. Wenn of this verhalten jedoch nicht immer so Gewollt ist, lassen sich bei vielen Neuer Implementierungen Quantor als „genügsam“ oder „zurückhaltend “ (englisch nicht gierig , nur ungern ) deklarieren. Zum Beispiel wird in Perl hier für den Quantor ein Fragezeichen ?nachgestellt. Die Implementierung von genügsamem Quantor ist vergleichsweise aufwendig (Necessesary Zurück – Tracking ), Weshalb nicht alle Implementierungen this unterstützen.

Beispiel (Perl Syntax)
Angenommen, es wird der Regulars Ausdruck A.*Bauf Zeichenfolge „ABCDEB“ angewendet, so Würde sie als sind „ABCDEB“ finden sterben. Mit Hilfe des „genügsam“ -Quantors *?paßt die Nonne Modifiziert Ausdruck – auch A.*?B – nur sterben Zeichenkette „AB“, Brichta stirbt auch Suche nach DEM Ersten gefundenem „B“ ab. Ein gleichwertiger Regulars Ausdruck für Dolmetscher, sterben Diesen Quantor nicht unterstützen, wäre A[^B]*B.
QF1 Die Zeichen^und$whch im , multiline- Modus zusammen, auch m-Modifier Gesetzt Wenn Der Werd, Auch Zeilenanfänge und ‚Ende.

Possessives Verhalten

Eine Variante des oberen beschreibenden vien Verhaltens ist das possessive Matching . Wenn hierbei jedoch die Tracking – Zurück verhindert Wird, Wird einmal übereinstimmenden Zeichen nicht wieder freigegeben. DAHER FINDEN sie in der Literatur Auch sterben Synonyme Bezeichnung Atomgruppierung , unabhängig subexpression oder nicht-Rückzieher Unter – Pattern . Die Syntax für diese Konstrukte variiert unterscheidet sich von der Programmierung. Ursprünglich gerechnet wird Sölch Teilausdrücke (engl. „Subpattern“) in Perl Durch formuliert. Daneben existieren seit Perl 5.10 sterben äquivalenten, in Java BEREITS Übliches besitzergreifend Quantor , , und .(?>Ausdruck)++*+?+{min,max}+

beispiel
Angenommen es wird auf sterben Zeichenfolge „ABCDEB“ , wo Ausdruck Stamm A.*+Bangewendet, so der Teufel keine Übereinstimmung ist. Bei der Abarbeitung Dezember Regulars Ausdrucks Würde der Teil .*+bis zum Ende der Zeichenkette übereinstimmen. Um jedoch das gesamt Ausdruck zu Bern, Muß ein Zeichen – hier auch die „B“ – wieder freigegeben Werden. Es besitzergreifend Quantor verbietet stirbt aufgrund Unterdrückten Backtrackings Dez Weshalb keine Erfolgreiche Übereinstimmung gefunden Werden Kann.

Gruppierungen und Rückläufereferenzen

Ausdrücke mit runden Klammern verschweißt (und zusammenfassen : Etwa ist nur eine „abc“ oder eine „abcabc“ usw. ) (abc)+

Ein einfaches Implementierungsteam speichert, das eine Gruppe von Mitarbeitern finanziert und etabliert hat, die zu einem Treffen der Textsetzung eingeladen wurden. This Werden Rückwärtsreferenzen (englisch zurück Referenzen ) genannt. Hauf Wird dazu sterben Schreibweise oder used, Wobei n sterben Übereinstimmung wo n -TEN Gruppierung Entspricht. Eine Sonderstellung Stellt dabei n = 0 dar, das meist für Übereinstimmung des Gesamt Regulars Ausdruck sterben STAND. \n$n

beispiel
Ein Suchen und Ersetzen mit AA(.*?)BBals regulärem Suchausdruck und \1als Ersetzung Ersetzt alle Zeichenketten, sterben von AA und BB Eingeschlossen Sind, between Durch den AA und BB enthaltenen Text. Das heißt AA und BB und der Text Dazwischen Wird Ersetzt durch den Text, wo ursprünglich between AA und BB Zustand Auch fehlen AA und BB im Plan Ergebnis.

Interpreter of regulars, the requirements requires zutreffen, entsprechen nicht mehr dem Typ 3 der Chomsky-Hierarchie . Mit Dem Pumping-Lemma Lässt sich zeigen, that ein Regulars Ausdruck, wo feststellt, ob in Einer Zeichenkette vor und nach der 1same Anzahl von sterben 0Steht, keine Regulars Sprache ist.

Danebs Gibt es auch noch Gruppierungen, die keine Rückwärtsreferenz Erzeugen (englisch non-capturing ). Die Syntax in den Dafür Laut meisten Implementierungen (?:) . Regexp-Dokumentationen wies darauf hin, dass die Erzeugung von Rückwärtsreferenzszenen vermieden wird, sollte kein späteter Zugriff auf sie erfolgen. Das ist, wo die Erzeugung der Referenzen Kosten für die Speicherung der gefundenen Übereinstimmung bezahlt. Zudem schweißt, dass Implementierungen nur eine beschränkte Anzahl an Rückwärtsreferenz zu (maximal maximal 9).

beispiel

Meine Regeln wurden den \d+(?:-\d+)*Menschen in der Stadt Zindelfingen gegeben, die gefunden wurden, ohne dass die letzte Zahlenreihe als Rückreferenz zu erhalten war.

beispiel

Ein Datum im Format MM/DD/YYYYsoll im Format YYYY-MM-DDüberführen werden.

  1. Meine Hilfe des Ausdrucks ([0-1]?[0-9])\/([0-3]?[0-9])\/([0-9]{4})wurde diesen drei Zahlengruppen außergewöhnlich.
  2. Mys Ersetzungs-Ausdruck \3-\1-\2wurde die einzige Gruppe in diesem Format überführt.

Die Optionen

Sie können alternative Ausdrücke mit dem |-Symbol zulasssen.

beispiel
ABC|abcvorhergesagt „ABC“ oder „abc“, aber z. B. Nichte „Abc“.

Weitere Zeichen

Alle Besucher der Zeichenketten besuchten das Rechenzentrum, wurden in der Regel von der Zeiggen vorbereitet:

^ Steht für den Zeilenanfang (Nicht zu ändern mit ^der Zeichenauswahl [und ]).
$ Sie können Konen für die Zeilen- oder Zeichenketten-Ende stellen, die bei manchen Implementationen oder ein „\ n“ folgen müssen. Das tatsächliche Ende passt zu \z.
\ Ich bin mit der Metabedeutung des nächsten Zeichens auf (siehe Maskierungszeichen ) gegangen . Beispielweise lees Ausdruck (A\*)+der Zeichenketten „A *“, „A * A *“ usw. zu. Auf diese Weise läst sich auch ein Punkt „.“ Meine \.Suche, währed nach \mit \\gesucht wird.
\b Lerne Zeichenkette am Wortanfang oder am Wortende
\B leere Zeichenkette, die das Bild oder das Bild nicht sieht
\< leere Zeichenkette am Wortanfang
\> Lederzeichenkette am Wortende
\n ein Zeilenumbruch im Unix-Format
\r Ein Zeilenumbruch im alten (1999) Mac Format
\r\n Ein Zeilenumbruch im DOS- und Windows-Format
\t ein Tischler
beispiel
[^ ]$ Bedeutende: Die Zeichenkette Einander aus minde Einem Freund das Zeichen Bestehen, und das letzte Zeichen Darf kein Leerzeichen sein.

Umschau Behauptungen

Perl Version 5 Führt In addition to the Übliches regulares Ausdrücken Auch Vorgriff und Blick hinter Behauptungen (ETWA „vorausschauenden“ bzw. „nach hinten Schaumann end“ Annahmen oder Behauptungen) ein, war Unter dem Begriff Umsehen Behauptungen zusammengefasst Wird. [7] (.: „Kontextsensitiv“ engl) bedingungen zu formulieren, ohne den Kontext selbst als passend zu FINDEN Ausdrücke um sterben möglichkeit, kontextabhängige This Konstrukte Regulares erweitern zu sterben. Das heißt, Mag man alle Zeichenfolge „Sport“ finden, Die sterben Zeichenfolge „Verein“ folgt, ohne Dass jedoch sterben gefunden Zeichenfolge sterben Zeichenfolge „Verein“ selbst Enthält, wäre stirbt mit Einer Vorgriff Behauptung Möglich:Sport(?=verein). Im Beispielsatz „Ein Sportler betreibt Sport im Sportverein.“ Würde Jenes Regulars Ausdruck auch zum letzten Vorkommen von „Sport“ whch, wenn nur dieser Zeichenfolge „Verein“ folgt sterben; ist nicht zur Würde Teilzeichenkette „Sportverein“ whch jedoch.

Aufgrund wo Eigenschaft that der angegebene Kontext (im Beispiel „Verein“) Zwar Informationen angegeben Wird, jedoch kein expliziter bestandteil wo Pässe Zeichenkette enden (hier „Sport“) ist, Wird im zusammenhang Mit Behauptungen meist das Attribut Null-Breite mitgenannt. Die Vollständige Bezeichnung Laute SOMIT – je Once, ob ein Bestimmt Kontext gefordert (positiv) oder verboten (negativ) ist – Null-Breite positiv / negativ Vorgriff / hinter Behauptungen. Die Bezeichnung der RICHTUNG Ruhr DAHER that Regexp-Parser Eine Zeichenkette immer von links nach rechts abarbeiten.

Definition bezeichnung Erklärung schreibweise
(?=Ausdruck) positive Vorausschauzusicherung AUSDRUCK Durcheinander auf vorgenannten Ausdruck folgen Ausdruck(?=Ausdruck)
(?!Ausdruck) negative Vorausschauzusicherung Ausdruck Darf nicht auf vorgenannten Ausdruck folgen Ausdruck(?!Ausdruck)
(?<=Ausdruck) positive Rückblickbehauptung Ausdruck muss folgenden Ausdruck vorausgehen (?<=Ausdruck)Ausdruck
(?<!Ausdruck) Negative Look-Behind-Assertion Ausdruck darf nicht folgen Ausdruck nicht vorausgehen (?<!Ausdruck)Ausdruck

Look-arounds Wird nicht nur von Perl und PCRE , Sondern unter Anderem auch von Java , .NET und Python Unterstützt. JavaScript interpretiert ab Version 1.5 positiv und negativ Vorgriff [8] .

beispiel
\s(?=EUR)Steht für ein „Whitespace“ -Zeichen (d. H. Leerzeichen oder Tabulator), folgen diejenigen, die der Zeichenkette EURfolgen. Im Gegensatz zu \sEURGehören hier EURnicht zu Einer Pass Zeichenkette (engl.: „Matched Zeichenkette“) enden.

Bedingte Ausdrücke

Relativ wenig verbreitet sind bestimmte Ausdrucke. Dein Geist ist in Perl, PCRE und dem .NET Framework asetzbar anders. Python bietet für jeden Ausdruck im Zusammenhang mit Look-Around-Behauptungen nur eingeschränkte Funktionalität. [9]

(?(Bedingung)wahr-Ausdruck|falsch-Ausdruck) Wenn der Ausdruck „Bedingung“ gefunden wurde, wird der Ausdruck „Wahrscheinlichkeit“ zur Anwendung gebracht. Wenn der Suchausdruck gefunden wurde, konnte nicht zu „falsch-Ausdruck“ zur Anwendung kommen.

beispiel

Mit Dem Ausdruck (\()?\d+(?(1)\))Wird Wie Zeichenfolge 1(2)34oder (567), aber nicht 3)gefunden.

Literatur

Reguläre Ausdrucke

  • 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 Reguläre Ausdrücke mit Java 1.4. Springer, ISBN 1-59059-107-0 .
  • Jan Goyvaerts, Steven Leviathan: Reguläre Äußere Kochbuch. O’Reilly, ISBN 978-3-89721-957-1 .
  • Michael Fitzgerald: Einführung Reguläre Ausdrücke O’Reilly, ISBN 978-1-4493-9268-0 .

Reguläre Ausdrücke und natürliche Sprachen

  • Kenneth R. Beesley, Lauri Karttunen: Endliche Morphologie. Vertrieb für das Zentrum für das Studium von Sprache und Information. 2003. 2003 Serie: (CSLI-SCL) Studium der Computerlinguistik.

Reguläre Ausdrücke und Automatische Theorie

  • Jan Lunze: Ereignisdiscrete Systemse. Oldenbourg, 2006, ISBN 3-486-58071-X , S. 160-192.

Forschungsliteratur

  • Stephen C. Kleene: Darstellung von Ereignissen in Nervennetzen und endlichen Automaten. In: Claude E. Shannon, John McCarthy (Hrsg.): Automatische Studien. Princeton University Press, 1956, S. 3-42.

Weblinks

  • Regulieren Sie die Sprache, regulieren Sie Ausdrücke
  • POSIX-Spezifikation für reguläre Ausdrücke (englisch)
  • Perl-Syntax Stammgäste Ausdrücke (englisch)
  • Regex-Kurs für Anfänger mit Übungen
  • Umfanggerechte Regelung zu unterschiedlichen Ausdrücken und den verschiedenen Implementierungen (englisch)

Software

  • Online-visuelle Regex-Tester
  • Online-Regex-Tester
  • Online regex tester – Visualisierung und Schrittweise Nachverfolgung der Funktionsweise von regulärem Ausdruck (englisch)

Einzelstunden

  1. ↑ Hochspringen nach:a b Stephen C. Kleene : Darstellung von Ereignissen in Nervennetzen und endlichen Automaten . In: Claude E. Shannon , John McCarthy (Hrsg.): Automatische Studien . Princeton University Press, 1956, S. 3-42.
  2. Hochspringen↑ Alfred V. Aho , Ravi Sethi, Jeffrey Ullman : Compiler: Prinzipien, Techniken und Tools. Addison Wesley, 1986
  3. ↑ hochspringen nach:a c 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 .
  4. Hochspringen↑ Jacques Sakarovitch: Die Sprache, der Ausdruck und der (kleine) Automaton . In: LNCS . 3845, 2006, S. 15-30. doi : 10.1007 / 11605157_2 .
  5. Hochspringen↑ POSIX Spezifikationen
  6. Hochspringen↑ RE Bracket Expression , IEEE Std 1003.1, Die Open Group Base Spezifikationen, 2004
  7. Hochspringen↑ Lookahead und Lookbehind Zero-Width Assertions . Regular-Expressions.info
  8. Hochspringen↑ Mozilla-Entwickler-Netzwerk: JavaScript-Referenz
  9. Hochsprünge↑ Wenn-Dann-Else-Bedingungen in regulären Ausdrücken . Regular-Expressions.info