(PHP 4, PHP 5, PHP 7)
preg_replace — Sucht und ersetzt mit regulären Ausdrücken
$pattern
, mixed $replacement
, mixed $subject
[, int $limit = -1
[, int &$count
]] ) : mixed
Durchsucht die Zeichenkette subject nach
Übereinstimmungen mit pattern und ersetzt sie mit
replacement.
patternDer 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
pattern ein Array, werden alle Suchmuster durch
diese Zeichenkette ersetzt. Falls sowohl pattern
als auch replacement Arrays sind, wird jedes
Suchmuster pattern durch das Gegenstück aus
replacement ersetzt. Wenn das
replacement-Array weniger Elemente hat als das
pattern-Array, wird jedes überzählige
pattern durch die leere Zeichenkette ersetzt.
replacement darf Referenzen in der Form
\n oder
$n enthalten, 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. \0 oder $0
beziehen 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
\1 verwenden. So würde z.B. \11
die Funktion preg_replace() verwirren, weil sie
nicht weiß, ob Sie die Rückreferenzierung \1
gefolgt von der Zahl 1 wollen oder nur die
Rückreferenzierung \11. In diesem Fall ist die
Lösung, ${1}1 zu verwenden. Damit wird eine
isolierte Rückreferenzierung $1 erzeugt und die
1 bleibt ein Buchstabensymbol.
Wenn Sie den veralteten Modifikator e verwenden,
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.
subjectDie Zeichenkette oder ein Array mit Zeichenketten zum Durchsuchen.
Falls subject ein Array ist, wird das Suchen und
Ersetzen auf jedes Element von subject angewandt
und der Rückgabewert ist ebenfalls ein Array.
limit
Die maximal mögliche Anzahl von Ersetzungen für jedes Suchmuster in
jeder subject. Standardmäßiger Wert:
-1 (kein Limit).
countFalls angegeben, wird dieser Variable die Anzahl vorgenommener Ersetzungen zugewiesen.
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.
Ab PHP 5.5.0 wird bei Übergabe des Modifikators "\e" ein Fehler der Stufe
E_DEPRECATED ausgegeben. Ab PHP 7.0.0 ist die Verwendung
des "\e" Modifikators ein Fehler; ein E_WARNING wird in
diesem Fall ausgegeben.
| Version | Beschreibung |
|---|---|
| 7.0.0 |
Die Unterstützung für den /e Modifikator wurde entfernt.
Verwenden Sie statt dessen preg_replace_callback().
|
| 5.5.0 |
Der Modifikator /e ist veraltet und sollte nicht
mehr verwendet werden. Verwenden Sie stattdessen
preg_replace_callback(). Für ergänzende
Informationen über Sicherheitsrisiken
siehe PREG_REPLACE_EVAL.
|
| 5.1.0 | Den Parameter count hinzugefügt |
Beispiel #1 Die Verwendung von Rückreferenzierungen mit darauf folgenden numerischen Literalen
<?php
$zeichenkette = '15. April 2003';
$suchmuster = '/(\d+)\. (\w+) (\d+)/i';
$ersetzung = '${2}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{2})-(\d{1,2})-(\d{1,2})/',
'/^\s*{(\w+)}\s*=/');
$ersetzen = array ('\4.\3.\1\2', '$\1 =');
echo preg_replace($suchmuster, $ersetzen, '{startDatum} = 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
Hinweis:
Bei 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 Sie Indizes verwenden, um festzulegen welchespatterndurch welchen Ersatzreplacementersetzt werden soll, sollten Sie vor dem Aufruf von preg_replace() ksort() auf jedes Array anwenden.