W3docs

Die PHP-Funktion preg_filter verstehen

Die Funktion preg_filter in PHP ermöglicht die Suche und den Ersatz von Text mit regulären Ausdrücken und gibt nur die übereinstimmenden Einträge zurück.

Die Funktion preg_filter in PHP durchsucht einen String (oder ein Array von Strings) nach Text, der einem regulären Ausdruck entspricht, und ersetzt ihn. Ihr besonderes Merkmal ist, dass sie nur die Einträge zurückgibt, bei denen eine Übereinstimmung gefunden wurde — nicht übereinstimmende Einträge werden verworfen. Dies macht sie ideal für Aufgaben, bei denen Sie in einem einzigen Schritt suchen, ersetzen und filtern möchten.

Wenn Sie preg_replace bereits verwendet haben, wird Ihnen preg_filter vertraut vorkommen: Die Syntax ist identisch. Der einzige Verhaltensunterschied — was mit nicht übereinstimmenden Subjekten passiert — ist das, was preg_filter besonders nützlich macht, und genau darauf konzentriert sich diese Seite.

In diesem Artikel behandeln wir die Syntax, die Parameter, den Unterschied zwischen preg_filter und preg_replace sowie die häufigsten Anwendungsfälle, jeweils mit einem ausführbaren Beispiel.

Syntax und Parameter

Die Syntax der Funktion preg_filter lautet wie folgt:

PHP preg_filter Syntax

preg_filter(pattern, replacement, subject [, limit [, count]])

Die Parameter sind wie folgt:

  • pattern: Dies ist ein Muster für reguläre Ausdrücke, das den zu suchenden Text angibt.
  • replacement: Dies ist der Text, der den übereinstimmenden Text im Subjekt ersetzt.
  • subject: Dies ist der String, in dem Text gesucht und ersetzt werden soll.
  • limit (optional): Die maximale Anzahl von Ersetzungen pro Subjekt-String. Standardwert ist -1 (kein Limit).
  • count (optional): Eine per Referenz übergebene Variable, die mit der Gesamtzahl der vorgenommenen Ersetzungen befüllt wird.

Die Argumente pattern, replacement und subject können jeweils ein einzelner Wert oder ein Array sein, genau wie bei preg_replace. Der Rückgabewert ist ein String, wenn subject ein String ist, und ein Array, wenn subject ein Array ist.

preg_filter vs. preg_replace

Beide Funktionen nehmen dieselben Argumente entgegen und führen dieselbe Such-und-Ersetz-Arbeit durch. Der Unterschied liegt darin, was sie zurückgeben, wenn ein Subjekt nicht dem Muster entspricht:

  • preg_replace gibt das Subjekt unverändert zurück.
  • preg_filter gibt null für ein String-Subjekt zurück und lässt den Eintrag bei einem Array-Subjekt vollständig weg.
<?php
$input = ["123", "abc", "456"];

// preg_replace keeps every element, matched or not.
print_r(preg_replace("/\d+/", "[num]", $input));
// Array ( [0] => [num] [1] => abc [2] => [num] )

// preg_filter drops the non-matching "abc".
print_r(preg_filter("/\d+/", "[num]", $input));
// Array ( [0] => [num] [2] => [num] )
?>

Beachten Sie, dass preg_filter die ursprünglichen Schlüssel (0 und 2) beibehält — das Array wird nicht neu indiziert.

Anwendungsfälle

preg_filter ist besonders nützlich, wenn Sie gleichzeitig suchen, ersetzen und filtern müssen. Häufige Anwendungsfälle sind:

  • Arrays filtern: Übergeben Sie ein Array von Strings und erhalten Sie nur die Elemente zurück, die dem Muster entsprachen.
  • HTML-Tags entfernen: Tags aus Strings oder Arrays von Strings entfernen.
  • Extrahieren und neu formatieren: Übereinstimmenden Text ersetzen und dabei Einträge verwerfen, die nichts Relevantes enthalten.

Beispiel: HTML-Tags entfernen

In diesem Beispiel verwenden wir preg_filter, um HTML-Tags aus einem String zu entfernen:

PHP preg_filter Beispiel

php— editable, runs on the server

In diesem Beispiel verwenden wir das Muster für reguläre Ausdrücke /<[^>]+>/, um alle HTML-Tags im String $html zu finden. Der Parameter replacement ist auf einen leeren String gesetzt, sodass der übereinstimmende Text entfernt wird. Der resultierende Text wird in der Variable $text gespeichert und auf dem Bildschirm ausgegeben.

Beispiel: Array-Elemente filtern

preg_filter eignet sich besonders gut für die Arbeit mit Arrays, da nicht übereinstimmende Elemente entfernt werden:

<?php
$items = ["apple", "banana", "apricot", "cherry"];
$filtered = preg_filter("/^a/", "A", $items);
print_r($filtered);
// Outputs:
// Array
// (
//     [0] => Apple
//     [2] => Apricot
// )
?>

In diesem Beispiel ersetzt preg_filter das führende „a" durch „A", entfernt aber automatisch „banana" und „cherry", da sie dem Muster nicht entsprechen. Die beibehaltenen Elemente behalten ihre ursprünglichen Schlüssel (0 und 2).

Ersetzungen zählen mit dem count-Parameter

Der optionale fünfte Parameter wird per Referenz mit der Anzahl der vorgenommenen Ersetzungen befüllt, was für Berichte oder für die Verzweigung danach nützlich ist, ob etwas übereinstimmte:

<?php
$subject = "Order #42 and order #7";
$result = preg_filter("/#(\d+)/", "[$1]", $subject, -1, $count);
echo $result . "\n";   // Order [42] and order [7]
echo $count . "\n";    // 2
?>

Hier ist $1 in der Ersetzung eine Rückreferenz auf die erste Erfassungsgruppe. Zwei Übereinstimmungen wurden ersetzt, daher ist $count gleich 2.

Fazit

preg_filter führt eine Suche und Ersetzung mit regulären Ausdrücken durch, genau wie preg_replace, verwirft aber Subjekte, die nicht übereinstimmen — es gibt null für Strings zurück und entfernt nicht übereinstimmende Elemente aus Arrays. Das macht es zur richtigen Wahl, wenn Filtern und Ersetzen in einem einzigen Schritt zusammengehören.

Um tiefer in PHP's Regex-Werkzeugkasten einzutauchen, lesen Sie preg_match zum Testen einer einzelnen Übereinstimmung, preg_match_all zum Finden aller Übereinstimmungen, preg_split zum Aufteilen von Strings und preg_replace_callback, wenn die Ersetzung im Code berechnet werden muss.

Übungen

Übung
Was ist die Funktion von preg_filter in PHP?
Was ist die Funktion von preg_filter in PHP?
Was this page helpful?