Diese Funktion durchsucht einen Text nach einer Übereinstimmung mit einem Suchmuster.
Die Syntax lautet:
int preg_match (string Suchmuster, string Zeichenkette [, array &Treffer [, int Flags [, int Versatz]]])
Die Funktion erwartet mindestens zwei Parameter, optional können noch drei weitere angegeben werden.
- Suchmuster
- Der Reguläre Ausdruck samt Delimiter und Modifier
- Zeichenkette
- Der Text, der durchsucht werden soll
- Treffer
- Optionaler Parameter, liefert die gefundenen Treffer und Unterausdrücke
- Flags
- Optional, erlaubt die Übergabe bestimmter Parameter
- Versatz
- Optional, die Stelle, ab der gesucht werden soll
Als Rückgabewert der Funktion erhält man die Anzahl der Übereinstimmungen des Suchmusters mit dem Text. Die ist entweder 0, wenn nichts gefunden wurde, oder 1 - da preg_match() nach dem ersten Treffer nicht weitersucht - wenn etwas gefunden wurde. Wenn ein Fehler auftrat, wird FALSE zurückgegeben.
Mit preg_match lässt sich unter anderem überprüfen, ob ein Text bestimmten
Kriterien entspricht. So könnte man hiermit
<?PHP
if (preg_match('#^[a-z]+$#i', 'Dies ist der Test'))
echo 'Nur Buchstaben!';
else
echo 'Nicht nur Buchstaben!';
?>
prüfen, ob eine Zeichenkette ausschließlich Buchstaben von a-z
beziehungsweise A-Z enthält. Erklärungen zu der verwendeten Zeichenklasse,
den Metazeichen und den Quantifier und
Modifiern finden sich in den jeweiligen Abschnitten des Tutorials.
Die Rückgabe von preg_match
Wird bei der Verwendung von preg_match() ein dritter Parameter angegeben, so stehen in ihm nach der Abarbeitung die gefundene Zeichenkette und die enthaltenen Unterausdrücke als Array zur Verfügung. Im ersten Element (Index 0) findet sich der dabei gesamte Treffer, in den weiteren Elementen die gefundenen Unterausdrücke. Die Nummerierung entspricht der normalen Nummerierung von Unterausdrücken.
Im folgenden Beispiel wird ein einfacher String, der zur Anmeldung an einer
Datenbank verwendet werden kann, auf Gültigkeit überprüft.
Gleichzeitigt werden die einzelnen Teile zurückgegeben und können weiterverwendet
werden.
<?PHP
if (preg_match ('#(.+):(.*)@(.+)/(.+)#', 'root:rootie@localhost/pcre', $rueckgabe))
echo '<pre>'.print_r($rueckgabe, TRUE).'</pre>';
else
echo 'Unpassendes Format!';
?>
Der Code führt zu folgender Ausgabe (die Kommentare wurden ergänzt):
Array
(
[0] => root:rootie@localhost/pcre // die gesamte gefundene Textstelle
[1] => root // erster Unterausdruck
[2] => rootie // zweiter Unterausdruck
[3] => localhost // dritter Unterausdruck
[4] => pcre // vierter Unterausdruck
)
preg_match() eignet sich somit einerseits zum Prüfen einer Zeichenkette
als auch andererseits zum direkten Weiterverarbeiten der gefundenen Treffer.
Weitere optionale Parameter
Neben den zwei anzugebenden Parametern können an preg_match() noch drei weitere übergeben werden, die das Verhalten der Funktion zusätzlich beeinflussen. Auf den ersten optionalen Parameter wurde im vorherigen Abschnitt schon eingegangen, nachfolgenden werden noch die zwei anderen erläutert.
Die Flags von preg_match()
Durch Angabe bestimmter Flags kann das Verhalten von preg_match() beeinflusst werden. Die Funktion preg_match() besitzt genau ein Flag, welches verwendet werden kann.
PREG_OFFSET_CAPTURE
Durch Angabe des Flags PREG_OFFSET_CAPTURE werden zusätzlich zu den gefundenen Treffern noch die jeweiligen Positionen im Suchtext, an denen die Treffer auftreten, zurückgegeben. Man erhält als Array-Elemente der Rückgabe nun keine Zeichenketten, sondern wiederum Arrays, die den Treffer und die Position als Elemente tragen.
Wenn wir wieder unser Beispiel von oben verwendet, diesmal allerdings
ergänzt um die Angabe von PREG_OFFSET_CAPTURE,
<?PHP
if (preg_match ('#(.+):(.*)@(.+)/(.+)#', 'root:rootie@localhost/pcre', $rueckgabe, PREG_OFFSET_CAPTURE))
echo '<pre>'.print_r($rueckgabe, TRUE).'</pre>';
else
echo 'Unpassendes Format!';
?>
erhalten wir als Rückgabe ein zwei-dimensionales Array, welches zusätzlich
noch die Position der Treffer enthält.
Array
(
[0] => Array // gesamter Treffer
(
[0] => root:rootie@localhost/pcre // Inhalt
[1] => 0 // Position des Auftretens
)
[1] => Array // erster Unterausdruck
(
[0] => root // Inhalt
[1] => 0 // Position des Auftretens
)
[2] => Array // zweiter Unterausdruck
(
[0] => rootie // Inhalt
[1] => 5 // Position des Auftretens
)
[3] => Array // dritter Unterausdruck
(
[0] => localhost // Inhalt
[1] => 12 // Position des Auftretens
)
[4] => Array // vierter Unterausdruck
(
[0] => pcre // Inhalt
[1] => 22 // Position des Auftretens
)
)
Sollen mehrere gleichartige Datenstrukturen extrahiert werden, sollte man das
im nächsten Abschnitt behandelte preg_match_all() verwenden.
Dieses liefert alle gefundenen Treffer.
Der Parameter Versatz
Normalerweise beginnt PHP am Anfang der zu durchsuchenden Zeichenkette mit dem Suchen nach Übereinstimmungen. Über den optionalen Parameter Versatz kann aber auch eine andere Stelle definiert werden, ab der gesucht wird. Der Parameter steht seit der PHP-Version 4.3.3 zur Verfügung (und wird deshalb beim RegExp-Evaluator noch nicht eingesetzt).
Will man diesen Parameter angeben, aber keine Flags definieren, muss man an der
Stelle des Parameters Flags den Wert -1 notieren,
so wie im folgenden Beispiel gezeigt wird.
<?PHP
preg_match($pattern, $subject, $sub, -1, $versatz);
?>
Dies gilt übrigens für alle preg-Funktionen, bei denen hinter den Flags noch
Parameter angegeben werden sollen.
Verwandte Themen
- Anwendungsbeispiele
- Aufbau von Regulären Ausdrücken
- Backreferences
- Delimiter
- Der Backslash
- Einfache Texte finden
- Fehlermeldungen
- Metazeichen
- Modifier
- PHP-Funktionen
- preg_match_all()
- Quantifier
- Unterausdrücke
- Zeichenklassen
Kapitelnavigation
- Letzte Änderung: 08.01.2012, 12:31:18
- © 2003 - 2012 nophia web