preg_replace
(PHP 4, PHP 5, PHP 7, PHP 8)
preg_replace — Sucht und ersetzt mit regulären Ausdrücken
Beschreibung
string|array
$pattern,string|array
$replacement,string|array
$subject,int
$limit = -1,int
&$count = null): string|array|null
Durchsucht die Zeichenkette subject nach
Übereinstimmungen mit pattern und ersetzt sie mit
replacement.
Parameter-Liste
-
pattern -
Der Ausdruck, nach dem gesucht wird. Es kann entweder eine Zeichenkette oder ein Array mit Zeichenketten sein.
Es stehen auch einige PCRE-Modifikatoren zur Verfügung.
-
replacement -
Die Zeichenkette oder das Array mit Zeichenketten zum Ersetzen. Falls dieser Parameter eine Zeichenkette ist und der Parameter
patternein Array, werden alle Suchmuster durch diese Zeichenkette ersetzt. Falls sowohlpatternals auchreplacementArrays sind, wird jedes Suchmusterpatterndurch das Gegenstück ausreplacementersetzt. Wenn dasreplacement-Array weniger Elemente hat als daspattern-Array, wird jedes überzähligepatterndurch die leere Zeichenkette ersetzt.replacementdarf Referenzen in der Form\noder$nenthalten, wobei Letztere vorzuziehen ist. Jede dieser Referenzen wird mit dem Text ersetzt, der vom n-ten eingeklammerten Suchmuster erfasst wurde. n kann einen Wert von 0 bis 99 haben.\0oder$0beziehen sich auf den Text, der auf das komplette Suchmuster passt. Um die Nummer des erfassenden Teil-Suchmusters zu erhalten, werden öffnende Klammern mit 1 beginnend von links nach rechts gezählt. Es ist zu beachten, dass Rückwärtsschrägstriche in String-Literalen ggf. maskiert werden müssen.Wenn Sie mit einer Ersetzung arbeiten wollen, in der auf eine Rückreferenzierung direkt eine weitere Zahl folgt (d. h. direkt nach der Übereinstimmmung mit einem Suchmuster soll eine Zahl kommen), können Sie für Ihre Rückreferenzierung nicht die Schreibweise
\1verwenden. So würde z. B.\11die Funktion preg_replace() verwirren, weil sie nicht weiß, ob Sie die Rückreferenzierung\1gefolgt von der Zahl1wollen oder nur die Rückreferenzierung\11. In diesem Fall ist die Lösung,$1zu verwenden. Damit wird eine isolierte Rückreferenzierung$1erzeugt und die1bleibt ein Buchstabensymbol.Wenn Sie den veralteten Modifikator
everwenden, maskiert diese Funktion ein paar Zeichen (nämlich',",\und NULL) in den Zeichenketten, mit denen die Rückreferenzierungen ersetzen werden. Das wird gemacht, um sicherzustellen, dass keine Syntaxfehler entstehen, wenn Rückreferenzierungen verwendet werden, die einfache oder doppelte Anführungszeichen enthalten (z. B.'strlen(\'$1\')+strlen("$2")'). Vergewissern Sie sich, dass Sie die Zeichenketten-Syntax von PHP kennen, um genau zu wissen, wie die ausgewertete Zeichenkette aussieht. -
subject -
Die Zeichenkette oder ein Array mit Zeichenketten zum Durchsuchen.
Falls
subjectein Array ist, wird das Suchen und Ersetzen auf jedes Element vonsubjectangewandt und der Rückgabewert ist ebenfalls ein Array.Wenn das
subject-Array assoziativ ist, bleiben die Schlüssel im zurückgegebenen Wert erhalten. -
limit -
Die maximal mögliche Anzahl von Ersetzungen für jedes Suchmuster in jeder
subject. Standardmäßiger Wert:-1(kein Limit). -
count -
Falls angegeben, wird dieser Variable die Anzahl vorgenommener Ersetzungen zugewiesen.
Rückgabewerte
preg_replace() gibt ein Array zurück, falls
subject ein Array ist, andernfalls eine
Zeichenkette.
Falls Übereinstimmungen gefunden wurden, wird die neue Zeichenkette
subject zurückgegeben, andernfalls wird
subject unverändert zurückgegeben oder null, falls
ein Fehler auftrat.
Fehler/Exceptions
Die Verwendung des Modifikators "\e" führt zu einem Fehler der Stufe
E_WARNING.
Wenn das übergebene Regex-Muster nicht zu einem gültigen Regex kompiliert werden
kann, wird ein Fehler der Stufe E_WARNING ausgegeben.
Beispiele
Beispiel #1 Die Verwendung von Rückreferenzierungen mit darauf folgenden numerischen Literalen
<?php
$zeichenkette = '15. April 2003';
$suchmuster = '/(\d+)\. (\w+) (\d+)/i';
$ersetzung = '$1,$3';
echo preg_replace($suchmuster, $ersetzung, $zeichenkette);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
April1,2003
Beispiel #2 Die Verwendung von preg_replace() mit indizierten Arrays
<?php
$zeichenkette = 'Der schnelle braune Fuchs springt über den faulen Hund.';
$suchmuster = array();
$suchmuster[0] = '/schnelle/';
$suchmuster[1] = '/braune/';
$suchmuster[2] = '/Fuchs/';
$ersetzungen = array();
$ersetzungen[2] = 'Bär';
$ersetzungen[1] = 'schwarze';
$ersetzungen[0] = 'langsame';
echo preg_replace($suchmuster, $ersetzungen, $zeichenkette);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Der Bär schwarze langsame springt über den faulen Hund.
Wenn wir Suchmuster und Ersetzungen mit ksort() sortieren, sollten wir bekommen, was wir wollten.
<?php
ksort($suchmuster);
ksort($ersetzungen);
echo preg_replace($suchmuster, $ersetzungen, $zeichenkette);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Der langsame schwarze Bär springt über den faulen Hund.
Beispiel #3 Ersetzen mehrerer Werte
<?php
$suchmuster = array ('/(19|20)(\d)-(\d{1,2})-(\d{1,2})/',
'/^\s*{(\w+)}\s*=/');
$ersetzen = array ('\4.\3.\1\2', '$\1 =');
echo preg_replace($suchmuster, $ersetzen, ' = 1999-5-27');
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
$startDatum = 27.5.1999
Beispiel #4 Leerzeichen entfernen
Dieses Beispiel entfernt überschüssige Leerzeichen aus einer Zeichenkette.
<?php
$str = 'foo o';
$str = preg_replace('/\s\s+/', ' ', $str);
// Das ist jetzt 'foo o'
echo $str;
?>
Beispiel #5 Die Verwendung des Parameters count
<?php
$anzahl = 0;
echo preg_replace(array('/\d/', '/\s/'), '*', 'xp 4 to', -1 , $anzahl);
echo $anzahl; //3
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
xp***to 3
Anmerkungen
Hinweis:
Bei der Verwendung von Arrays für
patternundreplacementwerden die Schlüssel in der Reihenfolge bearbeitet, in der sie im Array vorliegen. Das ist nicht notwendigerweise dieselbe, wie die numerische Reihenfolge der Indizes. Wenn Indizes verwendet werden, um festzulegen welchespatterndurch welchen Ersatzreplacementersetzt werden soll, sollte vor dem Aufruf von preg_replace() ksort() auf jedes Array angewendet werden.
Hinweis:
Wenn sowohl
patternals auchreplacementArrays sind, werden die Übereinstimmungsregeln nacheinander angewendet. Das heißt, das zweitepattern/replacement-Paar wirkt nicht auf die ursprüngliche Zeichenkette, sondern auf die Zeichenkette, die sich aus dem erstenpattern/replacement-Paar ergibt. Um parallele Ersetzungen zu simulieren, z. B. das Vertauschen von zwei Werten, muss ein Muster durch einen zwischengeschalteten Platzhalter ersetzt werden, der dann in einem späteren Paar durch die gewünschte Ersetzung ersetzt wird.<?php
$p = array('/a/', '/b/', '/c/');
$r = array('b', 'c', 'd');
print_r(preg_replace($p, $r, 'a'));
// Gibt d aus
?>
Siehe auch
- PCRE-Suchmuster
- preg_quote() - Maskiert Zeichen regulärer Ausdrücke
- preg_filter() - Sucht und ersetzt mit regulären Ausdrücken
- preg_match() - Führt eine Suche mit einem regulären Ausdruck durch
- preg_replace_callback() - Sucht und ersetzt mit regulären Ausdrücken unter Verwendung eines Callbacks
- preg_split() - Zerlegt eine Zeichenkette anhand eines regulären Ausdrucks
- preg_last_error() - Liefert den Fehlercode der letzten PCRE-RegEx-Auswertung

