Regular Expression: Unterschied zwischen den Versionen

Aus Foxwiki
Zeile 82: Zeile 82:


== Suchen & Ersetzen ==
== Suchen & Ersetzen ==
Beim reinen s-Befehl werden immer alle Zeilen ausgegeben, unabhängig davon, ob Ersetzungen durchgeführt wurden oder nicht. Dies lässt sich ändern, indem man ihn mit dem p-Befehl kombiniert. Die Abläufe sind wie folgt:
[[Regular Expression/Suchen & Ersetzen]]


'''p-Befehl'''
'''echo "dies wird nicht ausgegeben" | sed -n '/.*diiss.*/p''''
# gibt es eine Ergebnismenge, die zur RE "passt"?
# wenn ja, gibt die ganze Zeile aus.
'''s-Befehl ohne p-Befehl'''
'''echo "dies wird ausgegeben" | sed 's/wird/wird immer/''''
# gibt es eine Ergebnismenge, die zur RE "passt"?
# wenn ja, welches ist die effektive Ergebnismenge?
# ersetze diese durch den Replace-String
# gib die ganze Zeile aus (egal, ob geändert oder nicht)
'''s-Befehl mit p-Befehl'''
'''echo -e "xxx\nnächste Zeile" | sed -n 's/xxx/Ausgabe/p''''
# Die Kombination von s- und p-Befehl bewirkt, dass
# nur die geänderten Zeilen ausgegeben werden.
# Die Option -n darf nicht vergessen werden.
Im Allgemeinen ist es sinnvoll, den g-Spezifizierer ("global") zu verwenden, der direkt vor oder hinter dem p-Befehl steht:
'''echo -e "xxx--xxx\nnächste Zeile" | sed -n 's/xxx/Ausgabe/pg''''
# alle "xxx" werden ersetzt
=== Ersatzmuster ===
Bei einigen Tools (ex, sed und ed) werden zwei Muster angegeben: Ein Suchmuster (links) und ein Ersatzmuster (rechts). Nur die folgenden Zeichen sind in einem Ersatzmuster gültig:
{| class="wikitable sortable"
|-
| |
| | '''ex'''
| | '''sed'''
| | '''Ed'''
| |
|-
| | <tt>'''\'''</tt>
| | X
| | X
| | X
| | Sonderbedeutung des nächsten Zeichens aufhebe
|-
| | <tt>'''\n'''</tt>
| | X
| | X
| | X
| | Verwendet das in \( \) gespeicherte Muster erneut
|-
| | <tt>'''&'''</tt>
| | X
| | X
| |
| | Verwendet das vorherige Suchmuster erneut
|-
| | <tt>'''~'''</tt>
| | X
| |
| |
| | Verwendet das vorherige Ersatzmuster erneut
|-
| | <tt>'''\u'''</tt>
| | X
| |
| |
| | Ändert das erste Zeichen des Ersatzmusters auf Großschreibung
|-
| | <tt>'''\U'''</tt>
| | X
| |
| |
| | Ändert alle Zeichen des Ersatzmusters auf Großschreibung
|-
| | <tt>'''\l'''</tt>
| | X
| |
| |
| | Ändert das erste Zeichen des Ersatzmusters auf Kleinschreibung
|-
| | <tt>'''\L'''</tt>
| | X
| |
| |
| | Ändert alle Zeichen des Ersatzmusters auf Kleinschreibung
|-
| | <tt>'''\E'''</tt>
| | X
| |
| |
| | Hebt das vorangegangene \U oder \L auf
|-
| | <tt>'''\e'''</tt>
| | X
| |
| |
| | Hebt das vorangegangene \u oder \l auf
|-
|}
== Verknüpfungen ==
== Verknüpfungen ==
; Verknüpfung regulärer Ausdrücken
; Verknüpfung regulärer Ausdrücken

Version vom 14. Oktober 2024, 11:42 Uhr

Regular Expression (Regulärer Ausdruck) - Sprache zur Beschreibung von Zeichenketten

Beschreibung

Ein regulärer Ausdruck (regular expression,RegExp oder Regular expression) ist eine Zeichenkette, die der Beschreibung von Zeichenketten mithilfe bestimmter syntaktischer Regeln dient.

  • Reguläre Ausdrücke finden vorwiegend in der Softwareentwicklung Verwendung; für fast alle Programmiersprachen existieren Implementierungen.
  • Eine Regular Expression (im folgenden mit RE abgekürzt) ist so etwas wie ein Suchmuster, das dazu dient, komplizierte Suchanfragen mit wenigen Zeichen zu formulieren.
  • Die Syntax ist standardisiert und wird von verschiedenen Programmen verstanden, z. B.  sed, egrep, expr, perl. Das interpretierende Programm versucht, aus einer größeren Zeichenmenge (i.A. einer Zeile) eine Teilmenge zu finden, die zu der RE "passt".
  • Oft gibt es mehrere Teilmengen, die passen. In diesem Fall wird die größte Teilmenge als Ergebnis verwendet.
  • Pattern Matching
  • 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.
  • So ist es beispielsweise möglich, alle Wörter aus einer Wortliste herauszusuchen, die mit S beginnen und auf D enden – ohne die dazwischenliegenden Buchstaben und wahlweise deren Anzahl explizit vorgeben zu müssen.

Zeichenketten finden

  • 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.
  • Metazeichen
  • Hierbei wird ein regulärer Ausdruck aus den Zeichen des zugrunde liegenden Alphabets in Kombination mit den Metazeichen [ ] ( ) { } | ? + - * ^ $ \ . (teilweise kontextabhängig) gebildet.
  • Die Meta-Eigenschaft eines Zeichens kann durch ein vorangestelltes Backslash-Zeichen aufgehoben werden.
  • Alle übrigen Zeichen des Alphabets stehen für sich selbst.
  • Textersetzungen
  • Ein weiteres Beispiel für den Einsatz als Filter ist die Möglichkeit, komplizierte Textersetzungen durchzuführen.
  • Neben den aufgeführten analytischen Aufgaben können reguläre Ausdrücke auch verwendet werden, um Mengen von Wörtern zu erzeugen, ohne jedes Wort einzeln angeben zu müssen.
  • So lässt sich beispielsweise ein Ausdruck angeben, der bei einer gegebenen (Maximal-)Zeichenanzahl alle denkbaren Zeichenkombinationen („Wörter“) erzeugt, die mit S beginnen und mit D enden. Auf diese Weise können etwa systematisch E-Mail-Adressen (vor allem der Teil vor dem @) für den Spam-Versand generiert werden.

Erweiterungen

  • 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.

Anwendung regulärer Ausdrücke

Ken Thompson nutzte diese Notation in den 1960ern, um qed (eine Vorgängerversion des Unix-Editors ed) zu bauen und später das Werkzeug grep zu schreiben.

Seither implementieren viele Programme und Bibliotheken von Programmiersprachen Funktionen, um reguläre Ausdrücke zum Suchen und Ersetzen von Zeichenketten zu nutzen.

Beispiele für Regular expressionp-Implementierungen

Programme Bibliotheken der Programmiersprachen
* sed * Perl * PHP

Auch die Textverarbeitung und die Tabellenkalkulation des Office-Paketes OpenOffice.org bieten die Möglichkeit, mit regulären Ausdrücken im Text zu suchen.

Implementierungen

Basic Regular Expressions (BRE)
  • „grundlegende“ reguläre Ausdrücke
Extended Regular Expressions (ERE)
  • „erweiterte“ reguläre Ausdrücke
Perl Compatible Regular Expressions] (PCRE)

Einige Programme, etwa der Texteditor Vim, ermöglichen, zwischen verschiedenen Syntaxen zu wechseln.

siehe POSIX.2

Suchmuster

Regular Expression/Suchmuster

Listen

Regular Expression/Listen

Zeichenklassen

Regular Expression/Zeichenklassen

Quantoren

Regular Expression/Quantoren

Gruppierungen und Referenzen

Regular Expression/Gruppierungen und Referenzen

Suchen & Ersetzen

Regular Expression/Suchen & Ersetzen

Verknüpfungen

Verknüpfung regulärer Ausdrücken

Mehrere reguläre Ausdrücke können durch Aneinanderfügen zusammengeführt werden. Ein solcher Ausdruck findet dann alle Zeichenketten, die aneinander gehängt zu dem jeweiligen Ausdruck passen.

Beispiel

"[Aa]lpha"

Es besteht aus den einzelnen Bausteinen

  • "[Aa]"
  • "l"
  • "p"
  • "h"
  • "a"

Verknüpfung durch "oder"

Durch den Operator "|" lassen sich reguläre Ausdrücke mit einem "oder" verknüpfen.

Der daraus entstehende Ausdruck findet Zeichenketten, die entweder auf den einen oder den anderen Ausdruck passen.

Beispiel

"[Aa]lpha|[Bb]ravo"

  • findet alle Textstücke "Alpha", "alpha", "Bravo" und "bravo"
  • grep -E oder egrep
echo "--rot--gelb--" | sed 's/\(gelb\|rot\)/x/g'
echo "--rot--gelb--" | sed 's/gelb\|rot/x/g'
  • die runden Klammern und das oder-Zeichen "|" müssen escaped werden
  • die runden Klammern können weggelassen werden

Alternativen

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

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

Beispiele

a|b* * "a", "b", "bb", "bbb", …
(a|b)*
  • beliebig viele „a“ und „b“, einschließlich einer leeren Zeichenkette
  • „“, „a“, „b“, „aa“, „ab“, „ba“, „bb“, „aaa“, …
ab*(c|ε)
  • ε = leer
  • Zeichenketten beginnend mit „a“
  • kein- oder mehrmals „b“
  • optional a "c": {"a", "ac", "ab", "abc", "abb", "abbc", ...}

(0|(1(01*0)*1))*

  • set of binary numbers that are multiples of 3: { ε, "0", "00", "11", "000", "011", "110", "0000", "0011", "0110", "1001", "1100", "1111", "00000", ... }

Rangfolge

Rangfolge der Regeln

Ähnlich wie bei mathematischen Ausdrücken (Punkt- vor Strichrechnung) unterliegen die Verknüpfungsoperatoren einer Rangfolge:

  • Wiederholungen kommen vor Verkettungen
  • Verkettungen vor "oder"
  • Diese Regeln lassen sich durch Klammern überschreiben


Anhang

Siehe auch

Links

Weblinks