Wie wir gesehen haben, ist ein regulärer Ausdruck ein gemeinsames Muster, nach dem alle Wörter einer bestimmten Menge von Wörtern aufgebaut sind. In Programmiersprachen steht die Nutzung von regulären Ausdrücken zur Verfügung, um Benutzereingaben auf zulässige Form zu prüfen (z.B. eine E-Mail-Adresse) oder um "unscharfe" Suchvorgänge in Texten zu vereinfachen, also Suchvorgänge, bei denen die gesuchte Zeichenfolge nur ungefähr bekannt ist (z.B. der Name Meier in unterschiedlichen Schreibweisen).
In den Programmiersprachen PHP und JavaScript wird für reguläre Ausdrücke weitgehend dieselbe Notation wie in der theoretischen Informatik verwendet. Zusätzlich gibt es noch eine Reihe von Ergänzungen, die sich als praktisch erweisen.
In der Programmiersprache PHP sind ganzzahlige dezimale Zahlenkonstanten wie beispielsweise -17 nach folgendem Muster aufgebaut: Als erstes kann ein Vorzeichen kommen, und dann kommt eine nichtleere Ziffernfolge, die jedoch nicht mit einer Null beginnt, wenn danach noch Ziffern ungleich Null kommen (denn sonst wird die Zahl als Oktalzahl interpretiert).
Der reguläre Ausdruck, der in PHP dieses Muster beschreibt, lautet wie folgt:
(\+|-)?(0+|[1-9][0-9]*)
Zulässig als dezimale Zahlenkonstanten sind somit etwa
23, +23, -23, 9, 0, -0, 000, 2000, 365.
Nicht zulässig sind dagegen beispielsweise
007 (führende Null), --3 (mehr als ein Vorzeichen), + 3 (Leerzeichen).
Die genaue Syntax regulärer Ausdrücke in PHP wird im Folgenden erklärt; danach erschließt sich die Zusammensetzung des angegebenen regulären Beispiel-Ausdrucks.
Reguläre Ausdrücke enthalten Alphabetzeichen und Metazeichen. Alphabetzeichen sind diejenigen Zeichen, aus denen die Wörter bestehen, die durch den regulären Ausdruck erzeugt werden. Metazeichen sind diejenigen Zeichen, die darüber hinaus zur Darstellung des regulären Ausdrucks benötigt werden.
Die in obigem Ausdruck vorkommenden Metazeichen haben folgende Bedeutung
| | Alternative | |
* | optionale Wiederholung | |
? | Option | |
+ | Wiederholung | |
( ) | Gruppierung | |
\ | Aufhebung des Metazeichenstatus | |
[ ] | Zeichenmenge |
Das Zeichen - ist innerhalb von eckigen Klammern ein Metazeichen und bedeutet "bis", wenn es zwischen zwei Alphabetzeichen steht.
Eine Zeichenmenge besteht aus einer Aneinanderreihung von Zeichen zwischen zwei eckigen Klammern. Beispielsweise ist [abc] eine solche Zeichenmenge; sie steht als Kurzform für den regulären Ausdruck a|b|c. Mengen von alphabetisch aufeinanderfolgenden Zeichen lassen sich noch kürzer durch Verwendung des Zeichens - darstellen; beispielsweise steht [a-c] für [abc]. Im obigen Beispiel wurde unter anderem die Zeichenmenge [0-9] verwendet.
Andere Beispiele sind [a-zA-ZäöüßÄÖÜ] für alle Klein- und Großbuchstaben einschließlich Umlauten oder [+-] für die Zeichen + und -. Das Zeichen + ist innerhalb einer Zeichenmenge kein Metazeichen, daher wird kein vorangestellter \ benötigt. Das Zeichen - ist innerhalb von eckigen Klammern nur dann ein Metazeichen, wenn es zwischen zwei Alphabetzeichen steht, wie z.B. in [0-9].
Die Menge aller Zeichen wird durch das Metazeichen . dargestellt (ohne eckige Klammern). Der reguläre Ausdruck .+ steht also für eine nichtleere Folge von beliebigen Zeichen.
Eine Besonderheit stellt die Verwendung des Zeichens ^ in Zeichenmengen dar. Es ist hier ein Metazeichen und bedeutet "nicht". Die Zeichenmenge [^abc] stellt das Komplement der Zeichenmenge [abc] innerhalb der Menge aller Zeichen dar. Sie steht also für ein beliebiges Zeichen außer a, b und c.
In dem regulären Ausdruck aus dem Beispiel wird das optionale Vorzeichen durch den Teilausdruck (\+|-)? dargestellt. Ein Vorzeichen ist also ein Pluszeichen oder ein Minuszeichen. Durch das Fragezeichen wird ausgedrückt, dass das Vorzeichen optional ist, d.h. dass es auch fehlen kann. Die runden Klammern machen deutlich, auf welchen Ausdruck sich das Fragezeichen bezieht. Das Zeichen \ vor dem Pluszeichen bewirkt, dass das Pluszeichen hier als Alphabetzeichen und nicht als Metazeichen interpretiert wird. Eine alternative Darstellung dieses Teilausdrucks ist [+-]?.
Nach dem optionalen Vorzeichen kommt entweder eine nichtleere Folge von Nullen (dargestellt durch den Ausdruck 0+), oder eine der Ziffern von 1 bis 9 (dargestellt durch die Zeichenmenge [1-9]) gefolgt von einer möglicherweise auch leeren Folge von weiteren Ziffern aus dem Bereich von 0 bis 9 (dargestellt durch [0-9]*). Die Gruppierung dieser beiden Alternativen durch runde Klammern ist notwendig, da in regulären Ausdrücken "gefolgt von" stärker bindet als |.
Leerzeichen werden in regulären Ausdrücken in PHP nicht ignoriert, sondern als Alphabetzeichen behandelt. Da in den Zahlenkonstanten keine Leerzeichen auftreten, kommen im entsprechenden regulären Ausdruck keine Leerzeichen vor.
Es wurden hier nur die wichtigsten Möglichkeiten zur Darstellung von regulären Ausdrücken in PHP beschrieben – im Wesentlichen diejenigen, die eine Entsprechung in der theoretischen Informatik haben. Darüber hinaus gibt es in PHP noch eine ganze Reihe von weiteren Möglichkeiten, die teils sinnvoll, teils in ihrer Fülle auch verwirrend sind.
Folgendes PHP-Programm testet, ob ein bestimmtes Eingabewort von einem bestimmten regulären Ausdruck erzeugt wird.
Das Testprogramm gibt eine 1 aus, wenn das Eingabewort von dem regulären Ausdruck erzeugt wird, und sonst eine 0. Wird nichts ausgegeben, enthält der reguläre Ausdruck einen Fehler.
Die hier benutzte PHP-Funktion preg_match prüft normalerweise, ob irgendwo im Eingabewort ein Teilwort vorkommt, das von dem regulären Ausdruck erzeugt wird. Um zu prüfen, ob das ganze Eingabewort von dem regulären Ausdruck erzeugt wird, wird dem regulären Ausdruck noch das Zeichen (für Wortanfang) vorangestellt und das Zeichen $ (für Wortende) nachgestellt. Das Zeichen / stellt ein Begrenzungszeichen für den regulären Ausdruck dar.
Das folgende JavaScript-Programm testet, ob ein bestimmtes Eingabewort von einem bestimmten regulären Ausdruck erzeugt wird.
Auch hier wird der im Textfeld eingegebene reguläre Ausdruck wieder in die Zeichen ^ (für Wortanfang) und $ (für Wortende) eingeschlossen, damit geprüft wird, ob das gesamte Eingabewort von dem regulären Ausdruck erzeugt wird.
Zurück zu: [Reguläre Ausdruck, reguläre Sprache] oder [up]