preg_replace_callback
preg_split
PCRE-Funktionen
PHP Manual

# preg_replace

(PHP 4, PHP 5)

preg_replace — Sucht und ersetzt mit regulären Ausdrücken

### Beschreibung

mixed preg_replace ( mixed `$pattern` , mixed `$replacement` , mixed `$subject` [, int `$limit` = -1 [, int `&$count` ]] )

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.

  Mit dem Modifikator e wird der Parameter `replacement` nach den entsprechenden Ersetzungen der Referenzen von preg_replace() wie PHP-Code behandelt. Tipp: Stellen Sie sicher, dass `replacement` gültigen PHP-Code erzeugt, weil sich PHP sonst über einen Syntaxfehler (parse error) in der Zeile beschwert, die den Aufruf von preg_replace() enthält.

`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 (ab PHP 4.0.4) $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. Um einen Backslash im Ersatz zu verwenden, muss er verdoppelt werden ("\\\\" PHP-Zeichenkette).

  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 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.

`subject`

  Die 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).

`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.

### Changelog

Version | Beschreibung
--- | ---
5.1.0 | Den Parameter `count` hinzugefügt
4.0.4 | Die '$n'-Form für den Parameter `replacement` hinzugefügt
4.0.2 | Den Parameter `limit` hinzugefügt

### Beispiele

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 sprang ü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 sprang ü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 sprang ü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 Die Verwendung des Modifikators 'e'

`<?php
preg_replace("/(<\/?)(\w+)([^>]*>)/e",
"'\\1'.strtoupper('\\2').'\\3'",
$html_body);
?>`

Das wandelt alle HTML-Tags des durchsuchten Textes in Großbuchstaben um.

Beispiel #5 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 #6 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 Verwendung von Arrays für `pattern` und `replacement` werden 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 welches `pattern` durch welchen Ersatz `replacement` ersetzt werden soll, sollten Sie vor dem Aufruf von preg_replace() ksort() auf jedes Array anwenden.

### Siehe auch

- 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 einen regulären Ausdruck unter Verwendung eines Callbacks
- preg_split() - Zerlegt eine Zeichenkette anhand eines regulären Ausdrucks

preg_replace_callback
preg_split
PCRE-Funktionen
PHP Manual