Grundelemente der regulären Ausdrücke

Aus Siduction Wiki DE
Wechseln zu: Navigation, Suche

Überblick: Reguläre Ausdrücke

Zielsetzung

Reguläre Ausdrücke dienen zur Beschreibung von Texten. In dieser Beschreibung können Muster angegeben werden, die auf viele Text passen.

Sie werden einmal zum Suchen von nicht genau bekannten Texten eingesetzt oder von allen Fundstellen von verschieden Texten, die Gemeinsamkeiten aufweisen.

Eine weitere Anwendung ist die Manipulation von Texten durch Ersetzungen.

Grundelemente

Hinweis: Für die Metazeichen gibt es verschiedene Varianten. Im folgenden wird der Dialekt Perl Compatible Regular Expression (PCRE) benutzt.

  • Alle Zeichen außer den Metazeichen stehen für sich selber:
    • 'a' ist 'a', '!' ist '!'.
  • '.' steht für ein beliebiges Zeichen außer dem Zeilenwechsel
    • a.b steht also für axb oder a!b oder ...
  • '[' und ']' sind Metasymbole. Damit werden Zeichenklassen definiert. Eine Zeichenklasse wird über Aufzählung von Einzelzeichen oder Bereichen definiert.
    • [aeiou] findet einen Vokal
    • [0-9] findet eine Dezimalzahl
    • [0-9A-Fa-f] findet eine Hexadezimalziffer
  • Ist das erste Zeichen der Zeichenklasse ein '^', so bedeutet das das Inverse:
    • [^a-z] findet alle Zeichen außer den Buchstaben.
  • '|' ist ein Metasymbol, das Alternativen trennt:
    • Adam|Berta findet "Adam" oder "Berta"
    • Amsterdam|Berlin|Casablanka findet jedes der drei aufgeführten Städte
  • '(' und ')' sind Metazeichen, die einen Ausdruck klammern.
    • (feuer|wasser)fest findet feuerfest oder wasserfest

Übungen:

  • Muster, das "siduction" und "seduction" findet
  • Muster, das "bild01.jpg", "bild02.jpg" ... "bild29.jpg" findet.
  • Muster, das "Superman" und "Superwoman" findet

Posix-Zeichenklassen

  • [:alnum:] Alphanumerische Zeichen: [:alpha:] oder [:digit:].
  • [:alpha:] Buchstaben: [:lower:] oder [:upper:].
  • [:blank:] Leerzeichen oder Tabulator.
  • [:cntrl:] Steuerzeichen, die Zeichen mit ASCII-Wert 0-31 und das Zeichen mit dem Wert 127
  • [:digit:] Dezimalziffer
  • [:graph:] Graphische Zeichen: [:alnum:] oder [:punct:].
  • [:lower:] Kleinbuchstaben
  • [:print:] Druckbare Zeichen: [:alnum:], [:punct:] und Leerzeichen.
  • [:punct:] Satzzeichen wie: ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ .
  • [:space:] Whitespace: Horizontaler und vertikaler Tabulator, Zeilen- und Seitenvorschub, Wagenrücklauf und Leerzeichen.
  • [:upper:] Großbuchstaben
  • [:xdigit:] Hexadezimalziffer

PCRE-Zeichenklassen

  • \d Dezimalziffer
  • \D Alles außer Dezimalziffern
  • \w [a-zA-z0-9_]
  • \W [^a-zA-z0-9_]
  • \s Zwischenräume: Leerzeichen, Tabs, Zeilenenden
  • \S Alles außer Zwischenräume

Übungen:

  • Muster, das eine 3-stellige Zahl findet
  • Muster, das "bild01.jpg", "bild02.jpg" ... "bild29.jpg" findet.
  • Muster, das "Superman" und "Superwoman" findet

Anker

  • ^ Zeilenanfang
    • "^ohne" findet "ohnehin", aber nicht "Bohne"
  • $ Zeilenende
    • "txt$" findet "vorlage.txt", aber nicht "vorlage.txt~"
  • \< Wortanfang
    • "\<ohne" findet "Preis ohne Mwst", aber nicht "Bohne"
  • \> Wortende
    • "exe\>" findet "java.exe.bak", aber nicht "Hexenwahn"
  • \b Wortgrenze: Wechsel zwischen \w und \W bzw. \W und \w oder ^\w oder \w$
    • "kurz\b" findet "kurz und klein", aber nicht "kurzschluss"
  • \B keine Wortgrenze
    • kurz\B findet "kurze" aber nicht "kurz."
  • \A Beginn der Eingabe: Im Einzelzeilenmodus gleich ^, im Mehrzeilenmodus nur der Anfang der ersten Zeile.
  • \z Ende der Eingabe. Im Einzelzeilenmodus gleich $, im Mehrzeilenmodus nur das Ende der letzten Zeile.
  • \Z Wie \z, aber vor dem letzten Zeilenwechsel.

Übung:

  • Finde ein möglichst kurzes Muster, der die erste von den 2 folgenden Zeilen auswählt:
    • Nie mehr Schule.
    • Niemand würde manchmal sagen, er brauche mehr Schule.

Einzelzeichen

  • \\ Backslash
  • \0n n ist eine Oktalzahl: o oo moo mit 0 <= o <= 7 und 0 <= m <= 3
  • \xn n ist eine Hexzahl: hh hhh mit h aus [0-9a-fA-F]
  • \t Tabulator
  • \n Zeilenwechsel
  • \r Wagenrücklauf
  • \a Pieps (alert/bell)
  • \e ESC (0x1b)
  • \cX Control-Zeichen: X aus [a-z]. \ca ist 0x01, \cc ist 0x03

Übung:

  • Finde ein Muster, der alle Zeilen nicht findet, die Windows-Zeilenenden haben. Hinweis: In Windows-Textdateien enden Zeilen mit mit \r\n