Mit der Funktion preg_match()
lassen sich anhand eines regulären Ausdruckes Treffer in einer Zeichenkette in einem Array zurückgegeben. Dabei wird immer an Position 0
des Arrays der gesamte gematchte String zurückgegeben. Weitere Positionen beinhalten jeweils einen Teilstring, der durch die geklammerten Ausdrücke im regulären Ausdruck gematcht worden ist. Der Funktion wird zuerst der reguläre Ausdruck übergeben. Als nächstes wird ihr der String, in welchem gematcht wird, übergeben. Optional sind dann als Parameter das Array, in welches die Ergebnisse geschrieben werden, die Angabe des Flags PREG_OFFSET_CAPTURE
, welcher dafür sorgt, dass nicht die gematchten Strings, sondern die Orte, an denen gematcht worden ist, zurückgegeben werden und der Parameter offset
, der sagt, dass der String erst ab dieser Position betrachtet werden soll.
Folgendes Programm matcht IP-Adressen:
1 2 3 4 5 |
<?php $string = '127.0.0.1 internet 8.8.8.8 software'; preg_match('!([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)!', $string, $result, null, 10); var_dump($result); ?> |
Es erzeugt die folgende Ausgabe:
1 2 3 4 5 6 7 8 9 10 11 12 |
array(5) { [0]=> string(7) "8.8.8.8" [1]=> string(1) "8" [2]=> string(1) "8" [3]=> string(1) "8" [4]=> string(1) "8" } |
Es wird die zweite IP-Adresse gefunden, weil erst ab Position 10
gesucht wird. Würde auf den Offset verzichtet werden, so würde die erste Adresse gefunden werden. Die Ausgabe wird in das Array $result
geschrieben. Hierin ist zunächst die komplette gefundene IP-Adresse hinterlegt und dann jeweils eine Klammer des regulären Ausdruckes, so dass die Adresse in vier Teile zerfällt.
Die Funktion preg_match_all()
verfügt über die gleiche Parameterliste wie ihr Vorgänger preg_match()
. Allerdings stoppt diese Funktion nicht mehr, wenn das erste Pattern gefunden worden ist, sondern alle Funde des Patterns werden in dem Array zurückgeliefert. Die Funktion besitzt das Standardverhalten, dass in dem konkreten Fall ein Array der Dimension 5x2
zurückgeliefert wird. An Position 0
ist in diesem Array ein zweistelliges Array zu finden, welches die erste und zweite IP-Adresse beinhaltet. An den weiteren Positionen ist jeweils ein weiteres zweistelliges Array zu finden, welches den jeweiligen Teil der IP-Adresse beinhaltet. Dieses Verhalten kann auch erzeugt werden, wenn man in den Flags PREG_PATTERN_ORDER
angibt. Mit PREG_SET_ORDER
in den Flags wird jedoch ein 2x5
-Array erzeugt. An erster Position befindet sich in der zweiten Dimension dieses Arrays das komplette erste Array, welches durch preg_match()
erstellt worden wäre, an zweiter Position das zweite Array.
Die Funktion preg_replace()
ermöglicht es schließlich, Stellen, an denen das Pattern aufgetreten ist, im Originalstring zu ersetzen. Dabei wird ähnlich wie bei preg_match_all()
nicht beim ersten Treffer gestoppt. Der String zu dem der Treffer ersetzt werden soll, wird an dritter Position in der Parameterliste übergeben. Innerhalb dieses Strings ist es erlaubt, Teile oder auch den ganzen Treffer einzusetzen. Das Resultat wird nicht in ein übergebenes Array geschrieben, sondern wird von der Funktion zurückgegeben, wie auch im folgenden Beispiel zu sehen:
1 2 3 4 5 |
<?php $string = '127.0.0.1 internet 8.8.8.8 software'; $result = preg_replace ('!([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)!', '$1.$2.x.x', $string); echo ($result); ?> |
Das Beispiel eignet sich zur Anonymisierung der IP-Adressen. Zurückgegeben wird 127.0.x.x internet 8.8.x.x software
, da der erste und zweite Teil des Arrays wieder eingefügt wird.