Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP

Suchen und Ersetzen von Zeichenfolgen durch reguläre Ausdrücke in PHP

by
Read Time:10 minsLanguages:

German (Deutsch) translation by Ines Willenbrock (you can also view the original English article)

PHP kommt mit einer Vielzahl von Funktionen, um mit Strings zu arbeiten. Sie können diese eingebauten PHP-Funktionen verwenden, um Zeichenfolgen zu trimmen, zu verbinden oder zu ersetzen. String-Funktionen in PHP sind ziemlich leistungsstark. Mit ihnen können Sie Änderungen ohne Berücksichtigung der Groß-/Kleinschreibung vornehmen oder mehrere Ersetzungen auf einmal vornehmen. Sie erfordern jedoch immer noch die genaue Angabe der Zeichenfolgen, die Sie ersetzen möchten.

Manchmal ist das nicht genug. Sie werden auf viele Situationen stoßen, in denen diese Ersetzungen und Übereinstimmungen auf einem Muster anstelle einer bestimmten Zeichenfolge basieren müssen. Hier spielen reguläre Ausdrücke eine sehr wichtige Rolle.

In diesem Tutorial erfahren Sie, wie Sie Zeichenfolgen mit regulären Ausdrücken in PHP abgleichen, suchen und ersetzen.

Beginnen wir mit der Suche nach einer Übereinstimmung.

Verwenden von PHP preg_match() zur Suche nach Mustern in Strings in PHP

Die PHP Funktion preg_match() wird verwendet, um eine Übereinstimmung innerhalb von Zeichenfolgen basierend auf Ihrem angegebenen Muster zu finden. Sie hat zwei erforderliche Parameter: das Muster und die Zeichenfolge, in der wir eine Übereinstimmung finden möchten.

Beachten Sie, dass diese Funktion nur 1, 0 oder false zurückgibt, je nachdem, ob eine Übereinstimmung, keine Übereinstimmung oder ein Fehler aufgetreten ist. Sie können jedoch ein Array als optionalen dritten Parameter angeben, um es mit relevanten Informationen über die Übereinstimmung zu füllen.

Namen, die in englischer Sprache geschrieben werden, beginnen in der Regel mit einem Großbuchstaben und enthalten Alphabete von a bis z. Wir verwenden diese Regel, um ein sehr grundlegendes Muster zu erstellen und Übereinstimmungen für verschiedene Namen in einem bestimmten Text zu erhalten.

Die Verwendung von preg_match() oben gibt 1 zurück, weil es eine Übereinstimmung gefunden. Denken Sie daran, dass diese Funktion nicht die Gesamtzahl der Übereinstimmungen oder die Position zurückgibt, an der die Übereinstimmung gefunden wurde. Sie gibt einfach 1 zurück, wenn eine Übereinstimmung gefunden wurde, und 0, wenn keine Übereinstimmung gefunden wurde.

Das Array $names enthält ein einzelnes Element, das die vollständig übereinstimmende Zeichenfolge sein soll. Alle nachfolgenden Elemente werden entsprechend mit dem Untermuster übereinstimmen. Hier ist ein Beispiel:

Die Funktion preg_match_all() funktioniert genau wie preg_match() aber gibt die Anzahl der vollständigen Musterübereinstimmungen bei Erfolg oder false im Falle eines Fehlers zurück. Eine Sache, die Sie sich merken sollten, ist, dass die Suche nach weiteren Übereinstimmungen von der Endposition der vorherigen Übereinstimmung aus fortgesetzt wird.

Aufmerksame Leser haben vielleicht bemerkt, dass preg_match_all() ein mehrdimensionales Array zurückgegeben hat. Dies liegt daran, dass das erste Array eine Liste aller vollständigen Übereinstimmungen enthält und andere Arrays eine Liste nachfolgender Erfassungsgruppen enthalten sollen, falls vorhanden.

Wie Sie vielleicht bemerkt haben, gibt preg_match_all() nur die Anzahl der vollständigen Musterübereinstimmungen zurück.

Verwenden von preg_replace() zum Suchen und Ersetzen in PHP

Sie können die Funktion preg_replace() verwenden, um nach Mustern in einer Zeichenfolge zu suchen und sie dann zu ersetzen. Diese Funktion akzeptiert drei erforderliche Parameter. Der erste ist das Muster, das Sie finden möchten. Der zweite ist die Ersetzung und der dritte Parameter ist die Zeichenfolge, in der Sie diese Ersetzungen vornehmen möchten. Alle diese Parameter können entweder ein einzelner Wert oder ein Array sein.

Im Folgenden finden Sie einige Beispiele für die Verwendung von preg_replace(), um zu verstehen, wie sie mit verschiedenen Arten von Parametern funktioniert.

Bei den Variablen $pattern und $replacement handelte es sich um einzelne Zeichenfolgenwerte. Unsere Absicht war es, die Telefonnummer durch eine E-Mail-Adresse zu ersetzen, wo Menschen uns kontaktieren können. Die Verwendung eines regulären Ausdrucks stellt sicher, dass wir alle verschiedenen 10-stelligen Telefonnummern auf einmal ersetzen können.

Dieses Mal haben wir sowohl die Muster als auch Ersatz als Array geliefert. Sie können im Beispiel sehen, dass die Teile, die dem ersten Muster entsprechen, durch die erste Ersatzzeichenfolge in $replacements ersetzt wurden.

Es wird Zeiten geben, in denen Sie möchten, dass die übereinstimmenden Muster Teil der ersetzten Zeichenfolge in PHP sein. Dies kann einfach mit Erfassungsgruppen erfolgen. Hier ist ein Beispiel, in dem wir den Satz neuer Namen zur vorherigen Liste hinzufügen, anstatt sie zu ersetzen.

Wir haben unser erstes Muster in Klammern gesetzt, um es in eine einzelne Erfassungsgruppe zu verwandeln. Dies wird unsere erste Erfassungsgruppe und die Verwendung von ${1} in der Ersetzungszeichenfolge stellt die alte Liste der Namen der neuen voran.

In unserem letzten Beispiel haben wir preg_replace() mehrere Zeichenfolgen zur Verfügung gestellt, innerhalb derer wir die Ersetzung durchführen wollten. Wie Sie sehen können, werden alle Ersetzungen einzeln auf jeden Text stückweise angewendet.

Verwenden von preg_replace_callback() zum Suchen und Ersetzen mit Callback-Funktionen in PHP

Im vorherigen Abschnitt haben wir gesehen, wie leistungsfähig reguläre Ausdrücke sein können, um Zeichenfolgen zu ersetzen, die einem bestimmten Muster entsprechen. Wir können sogar Erfassungsgruppen verwenden, um die Übereinstimmung wiederzuverwenden, die wir an einer anderen Stelle in der Ersatzzeichenfolge gefunden haben.

Manchmal brauchen wir noch mehr Kontrolle als das, um die Erfassungsgruppe so zu ändern, wie wir es für richtig halten, bevor wir Ersetzungen vornehmen. Die Verwendung der preg_replace_callback() Funktion ist die perfekte Wahl dafür.

Wir haben alle verschiedenen Telefonnummern in all unseren bisherigen Beispielen durch eine einzige E-Mail-Adresse ersetzt. Es ist jedoch wahrscheinlicher, dass ein Unternehmen mit unterschiedlichen Telefonnummern auch unterschiedliche dedizierte E-Mail-Adressen hat. Die Funktion preg_replace_callback() ermöglicht es uns, diese Ersetzungen von Fall zu Fall vorzunehmen, so dass wir entsprechende Änderungen an der Ersatzzeichenfolge basierend auf dem Inhalt der Übereinstimmung vornehmen können.

In diesem Beispiel hatte jedes Teammitglied eine andere Telefonnummer und wir mussten die Telefonnummer durch eine Kombination aus Telefonnummer und E-Mail-Adressen ersetzen. Dies kann sehr einfach mit preg_replace_callback() erfolgen.

Wir beginnen damit, unsere eigene Funktion update_email() zu definieren, die die $matches als Eingabe aufnimmt. Das $matches-Array ist das gleiche, das wir besprochen haben, als wir über preg_match() sprachen. Das erste Element in $matches ist die gesamte Übereinstimmung und andere Elemente enthalten die nachfolgenden Untermuster.

Der reguläre Ausdruck in unserem Muster enthält zwei Erfassungsgruppen, um den Namen und die Telefonnummer als separate Elemente zu erfassen. Wir verwenden den Namen der Person, um unsere E-Mail-Adresse zu erhalten, indem wir sie mit strtolower() in Kleinbuchstaben konvertieren und dann die Adresse @test.com. Schließlich geben wir unseren neuen Ersatztext zurück.

Die neuere Version unserer Hauptzeichenfolge enthält nun sowohl die Telefonnummer als auch die E-Mail-Adresse der Mitarbeiter.

Verwenden von preg_split() zum Aufteilen von Zeichenfolgen in PHP

Die preg_split() Funktion ist praktisch, wenn Sie eine Hauptzeichenfolge basierend auf bestimmten Mustern in mehrere Teilzeichenfolgen aufteilen möchten. Dies ist wie explode() auf Steroiden.

Diese Funktion akzeptiert vier Parameter. Die ersten beiden sind in jedem Aufruf der Funktion erforderlich und sie geben das Muster an, nach dem wir suchen sollen, und die Hauptzeichenfolge. Die nächsten beiden Parameter sind optional und geben an, wie viele Zeichenfolgen zurückgegeben werden sollen und ob die zurückgegebenen Werte mit Flags geändert werden sollen.

Hier ist ein Beispiel, das Ihnen zeigt, wie Sie einzelne Namen aus einer Zeichenfolge abrufen, die eine große Liste von Namen enthält. Die Namen werden entweder durch ein oder mehrere Leerzeichen, ein oder mehrere Kommas und ein oder mehrere - oder _ Zeichen getrennt.

Wir setzen den dritten Parameter auf -1, um alle möglichen Splits zu erhalten. Das Flag PREG_SPLIT_NO_EPMTY wird dann verwendet, um alle leeren Zeichenfolgen loszuwerden.

Letzte Gedanken

In diesem Tutorial haben wir gelernt, wie man einige allgemeine und nützliche Funktionen im Zusammenhang mit regulären Ausdrücken in PHP verwendet. Wir begannen mit dem Erlernen, wie man preg_match() oder preg_match_all() verwendet, um alle Zeichenfolgen zu erhalten, die einem bestimmten Muster entsprechen. Danach haben wir gelernt, wie man preg_replace() und preg_replace_callback() verwendet, um die übereinstimmenden Muster durch eine andere Zeichenfolge zu ersetzen.

Reguläre Ausdrücke geben uns ein sehr mächtiges und dennoch zerbrechliches Werkzeug, um Zeichenfolgen in PHP zu manipulieren. Sie müssen vorsichtig sein, wenn Sie Ihre Muster definieren, aber sie sparen eine Menge Zeit, wenn sie richtig verwendet werden.

Advertisement
Did you find this post useful?
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.