Function.preg-match
Aus PHP-Wiki
preg_match — Führt eine Suche mit einem regulären Ausdruck durch
Inhaltsverzeichnis |
Beschreibung
int preg_match ( string $Suchmuster , string $Zeichenkette [, array &$Treffer [, int $Flags [, int $Versatz ]]] )
Durchsucht Zeichenkette
nach Übereinstimmungen mit
dem in Suchmuster
angegebenen regulären Ausdruck.
Parameter-Liste
- Suchmuster
- Der Ausdruck nach dem gesucht werden soll als Zeichenkette
- Zeichenkette
- Die zu durchsuchende Zeichenkette
- Treffer
- Falls der Parameter Treffer angegeben wurde, wird er mit den Suchergebnissen gefüllt. $treffer[0] enthält dann den Text, der auf das komplette Suchmuster passt, $treffer[1] den Text, der auf das erste eingeklammerte Teilsuchmuster passt und so weiter.
- Flags
- Flags kann das folgende Flag sein: PREG_OFFSET_CAPTURE Falls dieses Flag gesetzt ist, wird mit jeder gefundenen Übereinstimmung der dazugehörige Versatz in der Zeichenkette zurückgegeben. Beachten Sie, dass dies die Rückgabewerte in einem Array dahingehend ändert, dass jedes Element ein Array ist, das aus der übereinstimmenden Zeichenkette mit Index 0 und deren Stelle in Zeichenkette mit Index 1 besteht.
Versatz
Normalerweise beginnt die Suche am Anfang der Zeichenkette. Der
optionale Parameter Versatz
kann verwendet
werden, um eine andere Stelle in Bytes anzugeben, ab der gesucht werden
soll.
Hinweis:
Die Verwendung von Versatz
entspricht nicht der
Übergabe von substr($zeichenkette, $versatz) an
Stelle der zu Zeichenkette an preg_match(), weil
Suchmuster
Angaben wie zum Beispiel
^, $ oder
(?<=x) enthalten kann. Vergleiche:
<?php
$zeichenkette = "abcdef";
$suchmuster = '/^def/';
preg_match($suchmuster, $zeichenkette, $treffer, PREG_OFFSET_CAPTURE, 3);
print_r($treffer);
?>
Das oben gezeigte Beispiel erzeugt folgende
Ausgabe:
Array
(
)
während dieses Beispiel
<?php
$zeichenkette = "abcdef";
$suchmuster = '/^def/';
preg_match($suchmuster, substr($zeichenkette,3), $treffer, PREG_OFFSET_CAPTURE);
print_r($treffer);
?>
folgende Ausgabe erzeugt
Array
(
[0] => Array
(
[0] => def
[1] => 0
)
)
Rückgabewerte
preg_match() gibt die Anzahl der Übereinstimmungen mit Suchmuster zurück. Das ist entweder 0 (keine Übereinstimmung) oder 1, weil preg_match() die Suche nach der ersten Übereinstimmung beendet. Im Gegensatz dazu setzt preg_match_all() die Suche bis zum Ende von Zeichenkette fort. preg_match() gibt FALSE zurück, falls ein Fehler auftrat.
ChangeLog
Version
Beschreibung
4.3.3
Den Parameter Versatz
hinzugefügt
4.3.0
Das Flag PREG_OFFSET_CAPTURE hinzugefügt
4.3.0
Den Parameter Flags
hinzugefügt
Beispiele
=== #1 Die Zeichenkette "php" finden
<?php // Das "i" nach der Suchmuster=== <source lang="php"> <?php // Das \b im Suchmuster kennzeichnet eine Wortgrenze, weshalb nur eine // Übereinstimmung mit der einzelnen Zeichenkette "web" gefunden wird und // nicht ein Teilwort in "webbing" oder "cobweb" if (preg_match("/\bweb\b/i", "Für das Web ist PHP die Scripting-Sprache der Wahl.")) { echo "Es wurde eine Übereinstimmung gefunden."; } else { echo "Es wurde keine Übereinstimmung gefunden."; } if (preg_match("/\bweb\b/i", "PHP ist die Web-Scripting-Sprache der Wahl.")) { echo "Es wurde eine Übereinstimmung gefunden."; } else { echo "Es wurde keine Übereinstimmung gefunden."; } ?>
#3 Den Domänen
Beispiel #4 Benannte Teilsuchmuster (named subpatterns)
<?php $str = 'foobar: 2008'; preg_match('/(?\w+): (?\d+)/', $str, $treffer); print_r($treffer); ?>
Das oben gezeigte Beispiel erzeugt folgende
Ausgabe:Array ( [0] => foobar: 2008 [name] => foobar [1] => foobar [zahl] => 2008 [2] => 2008 )
Anmerkungen
Tipp Verwenden Sie nicht preg_match(), wenn Sie nur überprüfen wollen, ob eine Zeichenkette in einer anderen Zeichenkette enthalten ist. Verwenden Sie dafür stattdessen die Funktionen strpos() oder strstr(), die das schneller erledigen.