Menu

PHP preg_replace(): Regex-Ersetzung mit Rückverweisen

preg_replace($pattern, $replacement, $subject) ersetzt jeden Treffer eines regulären Ausdrucks: preg_replace('/\s+/', ' ', $text) fasst Leerraum zusammen. Hier: Rückverweise wie $1, preg_replace_callback, nicht alphanumerische Zeichen entfernen, Limits und Zählungen.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

preg_replace($pattern, $replacement, $subject) findet jeden Treffer eines regulären Ausdrucks in einem String und ersetzt ihn. preg_replace('/\s+/', ' ', $text) macht aus jeder Folge von Leerzeichen, Tabs und Zeilenumbrüchen ein einziges Leerzeichen.

Der ursprüngliche String wird nicht verändert; preg_replace() liefert einen neuen. \b markiert eine Wortgrenze, deshalb bleibt cats unberührt.

Rückverweise: 1,1, {1} und \1

Im Ersatz steht $1 für das, was die erste Capture Group getroffen hat, $2 für die zweite und $0 für den ganzen Treffer. Damit ordnest du den getroffenen Text um.

Schreib den Ersatz in einfache Anführungszeichen. In doppelten wird "\1" zu einem Oktal-Escape (das Byte 0x01), und "${1}" wird als Variable mit dem Namen 1 gelesen, die undefiniert ist und eine String-Syntax verwendet, die seit PHP 8.2 als veraltet gilt. '\1' in einfachen Anführungszeichen funktioniert wie '$1', aber $1 ist die übliche Schreibweise.

Nicht alphanumerische Zeichen entfernen

Eine negierte Zeichenklasse, [^...], trifft alles, was nicht aufgeführt ist. Ersetzt du sie durch '', wird es entfernt. Für Text in anderen Sprachen verwendest du die Unicode-Klassen \p{L} (jeder Buchstabe) und \p{N} (jede Ziffer) mit dem Modifikator u, sonst entfernst du é, ü und jedes japanische Zeichen.

Einen URL-Slug bauen

Mehrere Muster hintereinander machen aus einem Titel einen URL-Slug. Zuerst in Kleinbuchstaben umwandeln, dann jede Folge nicht alphanumerischer Zeichen durch einen Bindestrich ersetzen und schließlich Bindestriche an den Enden entfernen:

Mehrere Muster, ein Limit und eine Zählung

$pattern und $replacement können Arrays sein: Jedes Muster wird der Reihe nach durch den Ersatz mit demselben Index ersetzt. Das vierte Argument begrenzt die Ersetzungen pro Muster (-1 bedeutet kein Limit), und das fünfte bekommt, wie viele Ersetzungen vorgenommen wurden.

Den Ersatz mit preg_replace_callback berechnen

Wenn der Ersatz vom Treffer abhängt, verwendest du preg_replace_callback(). Es ruft deine Funktion einmal pro Treffer mit dem Array $matches auf und fügt ein, was die Funktion zurückgibt. Eine Arrow Function hält kurze Callbacks in einer Zeile.

preg_replace_callback_array() nimmt ein Array von Paaren pattern => callback, wenn mehrere Muster jeweils ihre eigene Funktion brauchen.

Ersatztext aus einer Variable

Ein $ oder ein Backslash im Ersatz hat eine Bedeutung, also kann ein Ersatz, der von einem Nutzer oder aus einer Datenbank kommt, verunstaltet werden. Ein Preis von $10 wird als Verweis auf Gruppe 10 gelesen, die nicht existiert, und kommt leer heraus:

Wenn weder der Suchtext noch der Ersatz ein Muster ist, ist str_replace() die einfachere und schnellere Wahl. Um ein Muster zu testen, bevor du etwas ersetzt, siehe preg_match().

Häufig gestellte Fragen

Wie verwende ich Rückverweise in preg_replace?

Verweise im Ersatz mit $1, $2 (oder \1) auf Capture Groups: preg_replace('/(\d{4})-(\d{2})-(\d{2})/', '$3/$2/$1', '2026-03-14') liefert "14/03/2026". Schreib den Ersatz in einfache Anführungszeichen und verwende ${1}, wenn auf den Verweis eine Ziffer folgt.

Wie entferne ich in PHP alle nicht alphanumerischen Zeichen?

preg_replace('/[^a-zA-Z0-9]/', '', $s) behält nur ASCII-Buchstaben und Ziffern. Um Buchstaben aus jeder Sprache zu behalten (é, ü, 日本語), verwendest du Unicode-Klassen mit dem Modifikator u: preg_replace('/[^\p{L}\p{N}]/u', '', $s).

Was ist der Unterschied zwischen preg_replace und preg_replace_callback?

preg_replace() nimmt einen festen Ersatz-String mit Platzhaltern wie $1. preg_replace_callback() ruft für jeden Treffer eine Funktion auf und verwendet ihren Rückgabewert, sodass du den Ersatz berechnen kannst: in Großbuchstaben umwandeln, damit rechnen oder in einem Array nachschlagen.

Sollte ich str_replace oder preg_replace verwenden?

Verwende str_replace(), wenn du festen Text ersetzt: Es ist schneller und braucht kein Escaping. Verwende preg_replace(), wenn der zu ersetzende Text einem Muster folgt, etwa beliebig viele Leerzeichen, eine beliebige Ziffer oder eine Wortgrenze.

Wie ersetze ich mit preg_replace nur den ersten Treffer?

Übergib ein Limit als viertes Argument: preg_replace('/\d+/', '#', 'a1 b2 c3', 1) liefert "a# b2 c3". Das fünfte Argument, per Referenz übergeben, bekommt die Anzahl der vorgenommenen Ersetzungen.

Illustration der Programmiersprachen bei Coddy

Lerne mit Coddy zu programmieren

LOS GEHT'S