- Die Suche wird von links nach rechts durchgeführt. Der erste Treffer wird zurückgeliefert, also der Treffer, der am weitesten links steht.
- Die Suche wird gierig (englisch: greedy) durchgeführt: Das Muster passt auf möglichst viele Zeichen. Lautet also ein Muster „beliebig viele Ziffern hintereinander“ und die zu durchsuchende Zeichenkette besteht ausschließlich aus Ziffern, so ist das Suchergebnis der komplette String, auch wenn bereits eines der Zeichen im String auf das Muster passen würde.
Die Reihenfolge dieser Regeln ist dabei wie gezeigt. Angenommen, ein Muster besagt „beliebig viele Ziffern hintereinander“ und der folgende String wird durchsucht: 1234X56789. Der „hintere“ Treffer auf das Muster, 56789, ist länger als der „vordere“ Treffer, 1234. Doch die erste Regel („von links nach rechts“) hat eine höhere Priorität als die zweite Regel; deswegen findet das Muster den Treffer 1234. Ein Begrenzungszeichen ist notwendig, um den Anfang und das Ende des regulären Ausdrucks zu markieren. Was Sie dabei wählen, ist relativ egal, solange es kein Backslash und kein alphanumerisches Zeichen ist. Meist setzt man auf den Schrägstrich (/), doch auch andere Zeichen sind möglich (häufig gesehen: etwa # oder %). Hintergrund: Wenn das Zeichen, das als Trennzeichen zum Einsatz kommt, innerhalb des regulären Ausdrucks ebenfalls vorkommt, muss es dort (durch einen vorangestellten Backslash) maskiert werden. Manche Implementierungen erfordern jedoch bestimmte Trennzeichen.
Literale
Ein Muster an sich ist bereits Folgendes:
/sechs/
Dieses Muster passt nicht nur auf die Zahl sechs oder auf komplexere Sätze wie Ein halbes Dutzend Eier sind sechs Eier, sondern auch auf Wörter wie Hausechse, denn auch dort kommt sechs vor. Man spricht hier ebenfalls von einem Literal.
Standardmäßig wird zwischen Groß- und Kleinschreibung unterschieden; obiges Muster würde also nicht auf den Satz Sechs Eier sind ein halbes Dutzend passen.
Zeichen maskieren
Solche Literal-Muster können alle Zeichen enthalten, inklusive Leer- und Sonderzeichen. Allerdings besitzen einige Zeichen innerhalb von regulären Ausdrücken eine besondere Bedeutung, unter anderem die folgenden:
( ) ? * + ^ $ . | [
Diese Zeichen werden auch Metazeichen genannt. Aufgrund ihrer speziellen Bedeutung innerhalb eines regulären Ausdrucks müssen sie speziell maskiert werden. Wenn Sie also in einem Ausdruck nach einer Klammer suchen, muss die Klammer maskiert werden – andernfalls würde die spezielle Bedeutung der Klammer zum Einsatz kommen.
Das Zeichen zum Entwerten ist der Backslash (). Dieser entwertet das nachfolgende Zeichen (auch, wenn das wiederum ein Backslash sein sollte). Wenn Sie also aus irgendeinem Grund nach der Zeichenkette ([/.*]) suchen möchten, sieht der reguläre Ausdruck dafür wie folgt aus:
/([/.*\])/
Das einzige Zeichen, das nicht maskiert worden ist, ist die schließende eckige Klammer, da ist das nicht notwendig. Schaden beziehungsweise etwas bewirken würde eine Maskierung allerdings nicht.
$regex = '/\(\[\/\.\*\\]\)/';
Der Backslash maskiert nicht nur Sonderzeichen, sondern stellt in Verbindung mit bestimmten Zeichen spezielle Ausdrücke dar, so genannte nicht druckbare Zeichen. Dazu gehören beispielsweise der Tabulator, der Wagenrücklauf und der Zeilenvorschub. Hier eine Liste:
- a – Piepston
- e – Escape-Zeichen
- f – Formfeed (Seitendurchlauf)
- n – Newline (Zeilenvorschub)
- r – Carriage Return (Wagenrücklauf)
- t – horizontaler Tabulator
- v – vertikaler Tabulator
Von diesen Zeichen sind vor allem der Zeilenvorschub und der Wagenrücklauf wichtig, denn diese beenden eine Zeile (unter Unix/Linux ist nur n notwendig, Windows verwendet rn). Auch der Tabulator ist praktisch, denn damit lassen sich recht bequem Serverlogs auslesen – der Tabulator trennt die einzelnen Einträge in jeder Zeile voneinander. Letzte Anwendung für Backslashes: Sonderzeichen aus den Zeichensätzen Latin-1 und Unicode lassen sich so angeben. Das macht reguläre Ausdrücke leichter portierbar. Das Zeichen für das britische Pfund, £, hat in Latin-1 den Zeichencode 163. In Hexadezimalschreibweise wird aus 163 die Zahl A3. Ein regulärer Ausdruck, der auf das Pfund-Zeichen passt, sieht dann wie folgt aus:
/xA3/
Durch das Präfix x wird also ein Zeichencode in Latin-1 dargestellt. Soweit zum britischen Pfund; das Euro-Zeichen dagegen ist nicht Teil von Latin-1, denn der Zeichensatz ist älter, zugunsten des Euro-Symbols konnte kein anderes Zeichen herausgeworfen werden. Im Unicode-Zeichensatz war natürlich noch Platz. Die hexadezimale Zeichennummer lautet 20AC, das Präfix für Unicode-Zeichen ist u. Damit ergibt sich das folgende Muster für €:
/u20AC/
Lesen Sie mehr über Suchgrenzen, Zeichenklassen,Alternativen und Quantifizierer im kompletten Probekapitel
Aufmacherbild: Shiny glossy icon with white design on black background von Shutterstock / Urheberrecht: ValentinT