Reguläre Ausdrücke (regular expressions) sind Muster (Patterns), mit denen Zeichenkombinationen in einer Zeichenkette gesucht und auch ersetzt werden können.

Sie können in verschiedenen Sprachen (Javascript, Perl, XML-Schema,...) eingesetzt werden und sind von der Syntax her überall ähnlich. In Javascript werden diese Ausdrücke z.B. bei den String-Methoden search(), match() und replace() oder bei den Methoden exec() und test() des regular-expression-Objektes verwendet. In XML-Schema zur Beschränkung von Elementinhalten.

Ein regulärer Ausdruck kann aus bis zu drei Teilen ( /pattern/i ) bestehen:

  • Aus zwei Schrägstrichen (Delimiter), die Anfang und Ende des Ausdrucks kennzeichen.
  • Aus dem Pattern, also dem Suchmuster.
  • Aus den Modifiern, also z.B. mit dem Flag "i" für ignore case (Groß-/Kleinschreibung ignorieren) oder "g" für global match (alle Stellen finden, nicht nur die erste). Beispiel:
    ModifierBedeutung
    /ei/Findet das hintere "ei" im Wort "Einerlei" wg. Groß/Kleinschreibung.
    /ei/iFindet das vordere "Ei" von "Einerlei, weil die Groß-/Kleinschreibung ignoriert wird.
    /ei/giFindet das vordere "Ei" und hintere "ei" im Wort "Einerlei"

Zur Einstimmung dient das folgende HTML-Coding. In das erste Formularfeld wird ein regulärer Ausdruck eingegeben, in das zweite Feld der zu testende Wert. Nach Anklicken des Test-Buttons wird der Wert gegen den Ausdruck per Methode test() geprüft und das Ergebnis im letzten Feld angezeigt.
  <html>
    <head>
      <script type="text/javascript">
        function pruef() {
          var input = formular.eingabe.value;
          var expression = new RegExp(formular.regAusdr.value);
          var result = expression.test(input);
          if (result == true)
            formular.ergebnis.value="Eingabe korrekt!";
          else
            formular.ergebnis.value="Eingabe falsch!";
        }
      </script>
    </head>
    <body>
      <form name="formular">
        <table>
          <tr><td>RegAusdruck: </td><td><input type="text" name="regAusdr" value="\d{2}"></td></tr>
          <tr><td>TestWert:    </td><td><input type="text" name="eingabe">
                                                    <input type="button" value="Test" onClick="pruef();"></td></tr>
          <tr><td>TestErgebnis:</td><td><input type="text" name="ergebnis"></td></tr>
        </table>
      </form>
    </body>
  </html>
Bedeutung des regulären Ausdrucks \d{2}:
- "\d" steht für Ziffer (digit)
- Zwischen den Klammern {} steht, wie oft die Einheit vor der Klammer (Ziffer) vorkommen muss (2 mal)
Der zu untersuchende Ausdruck muß also zwei Ziffern in Folge enthalten:
"A1" wäre nicht ok, "A12" wäre ok, "A12B" wäre ok, "A123" wäre ok, "A1B2" wäre nicht ok.

  Hinweis:
Wird in JavaScript eine Variable mit einem regulären Ausdruck definiert, dann diesen mit Delimiter angeben
Bsp.: var expression = /\d{2}/;

  Hinweis:
Wird in JavaScript ein neues RegExp-Objekt angelegt, dann keine Delimiter angeben, das macht der Konstruktor. Eventuelle Modifier durch Komma getrennt beim Konstruktoraufruf angeben.
Bsp.: var expression = new RegExp("\d{2}","i");

Aufbau

Der Aufbau regulärer Ausdrücke setzt sich aus einer Mischung von zu suchenden Zeichen und Metazeichen (Sonderfunktionen) zusammen, siehe folgende Tabelle.

SyntaxDefinitionBeispielErläuterung
Normale Zeichen und Metazeichen (Zeichen mit besonderer Bedeutung)
abc123Normale Zeichen(literale) /ei/ Zeichenfolge "ei" in z.B. zwei.
.Platzhalter für ein beliebiges Zeichen /./
/u.d/
Ein beliebiges Zeichen.
Zeichenkette mit "u", beliebigem Zeichen und "d", z.B.: "und".
[ ]Ein Zeichen aus einer Auswahl
(selbstdefinierte Zeichenklasse)
/[a]/
/[abc]/
/[abc ]/
/[aAeEiIoOuU]/
Suche nach einem "a".
Eines der Zeichen "a", "b" oder "c".
Eines der Zeichen "a", "b", "c" oder "Leerzeichen".
Ein Vokal.
-Minus in eckigen Klammern definiert einen Zeichenbereich /[0-9]/
/[a-zA-ZäÄöÖüÜß]/
/[A-Z2-5]/
/m[ea][iy]er/
Eine Ziffer von "0" bis "9".
Ein deutscher Buchstabe.
Ein Großbuchstabe oder eine Ziffer von 2 bis 5.
Gültig wäre meier, meyer, maier, mayer
|Alternative Ausdrücke /(ABC|abc)/
/Fuss(pilz|ball)/
"ABC" oder "abc", aber nicht "Abc".
Entweder Fusspilz oder Fussball.
( )Ausdrücke zusammenfassen /a(b|c)d/ Entweder "abd" oder "acd"
\Metabedeutung des nachfolgenden Zeichens aufheben /\./ Suche nach einem Punkt (statt eines Platzhalter)
^a) Anfang einer Zeichenkette

b) Negierung der angegebenen Zeichen
/^a/
/^Pa/
/[^a]/
/^a[^bc]/
Zeichenkette beginnend mit einem "a".
Findet "Pa" in "Papa und Mama", aber nicht in "Mama und Papa".
Ein beliebiges Zeichen außer "a".
Alles was mit "a" beginnt, außer "ab" und "ac".
$Ende einer Zeichenkette /a$/
/test$/
/^$/
Für Zeichenketten, die ein "a" als letztes Zeichen haben.
Findet "test" am Ende eines Suchbereichs.
Sucht leere Zeilen.
Vordefinierte Zeichenklasse
\dDigit = eine Ziffer [0-9] /\d/
/\d\d/
Sucht eine Ziffer.
2 aufeinander folgende Ziffern.
\DKomplementärmenge zu \d, also [^\d] /\D/ Sucht nach einem Zeichen, das keine Dezimalziffer ist.
\wBuchstabe, Ziffer oder Unterstrich [a-zA-Z_0-9] /\w/ Alle englischen kleinen und großen Buchstaben, Dezimalziffern und das Zeichen '_', keine deutschen Umlaute und kein 'ß'.
\WKomplementärmenge zu \w, also [^\w] /\W/  
Wiederholungsfaktoren (beschreiben wie häufig der vorherige Ausdruck vorkommen darf.
Wird kein Quantifier angegeben, so darf das vorherige Zeichen einmal vorkommen.
?Ein Ausdruck darf 0 oder 1 mal vorkommen (kann) /ab?a/
/^(abc)?$/
Findet ein "aba" oder "aa", aber kein "abba" (b käme 2mal vor).
Steht für "abc" oder leere Zeichenkette, nicht aber für "abcabc".
+Der Ausdruck muss einmal oder mehrfach vorkommen (muss) /a+/
/[ab]+/
/^[0-9]+$/
Erlaubt ist "a" oder "aa" oder "aaa" ...
Erlaubt ein "a", "b", "aa", "baab" ...
Zeichenkette nur aus Ziffer(n).
*Der Ausdruck darf beliebig oft (auch keinmal) vorkommen /ja*/
/.*/
/^[0-9]*$/
Trifft auf "j", "ja" und "jaaaa" zu.
Trifft auf jede beliebige Zeichenkette zu (auch leer).
Zeichenkette nur aus Ziffer(n) oder leer.
{n}Vorstehender Ausdruck muss exakt n-mal vorkommen /a{6}/ Genau sechs "a" müssen kommen.
{n,}Vorstehender Ausdruck muss mindestens n-mal vorkommen /a{1,}/ Mindestens ein "a" (äquivalent zu den Ausdrücken /a/ und /a+/).
{n,m}Mindestens n-mal und höchstens m-mal /a{2,4}/
/[0-9]{1,3}/
Zeichenkette, die 2, 3 oder 4 "a" hintereinander hat.
1, 2 oder 3 Ziffern in Folge, z. B. "48", jedoch nicht die Zeichenfolgen "0", "1.1" oder "a1a1".

Beispiele

Es folgen ein paar Suchmuster-Beispiele mit Erklärung:

BeispielBeschreibung
Deutsche Postleitzahl: Optionales führendes "D " gefolgt von 5 Ziffern.
(D )?\d{5}
Email: Darf nur aus Buchstaben, Ziffern, Bindestrichen, Unterstrichen, Punkten und einem "@" als Trenner bestehen.
/[\.a-z0-9_-]+@[\.a-z0-9-]+/i
/[a-z\d_-]+(\.[a-z\d_-]+)*@([a-z\d][a-z\d]*[a-z\d]\.)+([a-z]{2,4}|museum)/i
Angabe von Kleinbuchstaben reicht wegen dem i-Modifier, der Bindestrich am Ende der Auswahl muss nicht maskiert werden.
Variante: Kein führender Punkt, nach dem "@" zuerst nur Ziffern und Buchstaben, dann ein Punkt, abschließend nur Buchstaben.
Email (einfach): Mindestens "ein beliebiges Zeichen", ein "@", mindestens "ein beliebiges Zeichen", ein ".", mindestens "ein beliebiges Zeichen"
.+@.+\..+
Eine kürzere Variante, die eine einfache grundsätzliche Prüfung macht, die prinzipiell ausreicht.
Straßenname mit Hausnummer: Mindestens 5 Buchstaben, der erste groß, es kann ein Punkt folgen, zur Trennung ein oder mehrere Leerzeichen, dann eine Zahl mit mindestens einer Ziffer.
[A_Z][a-z]{4,}\.?\s+\d+
"\.?" ist ein entwerteter Punkt der vorkommen kann, dann muss mindestens ein Leerzeichen "\s+" (space) kommen, dann eine Zahl "\d+" mit mindestens einer Ziffer.
Telefonnummer: Erlaubt sind Ziffern und zur Trennung der Vorwahl die Zeichen "( )/ "
[\d\(\)\/]{4,13}
Es sind 4 bis 13 Zeichen aus dem Zeichenvorrat erlaubt, also Ziffern (digit) "\d" und die entwerteten Metazeichen "(" und ")" und "/".
Datum: Format: TT.MM.JJJJ
\d{1,2}\.\d{1,2}\.\d{4}
(\d\d\.){2}\d{4}
Zwei Ziffern und ein Punkt jeweils für Tag und Monat, dann 4 Ziffern für das Jahr.
Variante: Zweimal zwei Ziffern mit Punkt, dann 4 Ziffern fürs Jahr.
Datumsprüfung: Gültiger Bereich soll sein 1900.01.01 bis 2049.12.31
(19\d\d|20[0-4]\d)\.(0[1-9]|1[012])\.(0[1-9]|1\d|2\d|3[01])
IP-Adresse: Format: nnn.nnn.nnn.nnn
([0-9]{3}\.){3}[0-9]{3}
(([01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.){3}([01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])
Dreistellige Zahlen durch Punkt getrennt.
Variante: 0.0.0.0 ist erlaubt und sonst Werte von 0 bis 199 bzw. 200 bis 255.