21.09.2024
Heim / Windows-Übersicht / PHP regulär aus String-Nummer. PHP regexp: Beispiele für reguläre Ausdrücke. Beispiele für reguläre Ausdrücke

PHP regulär aus String-Nummer. PHP regexp: Beispiele für reguläre Ausdrücke. Beispiele für reguläre Ausdrücke

Beginnen wir damit, was ein regulärer Ausdruck ist. Beantworten Sie mir also diese Frage: Enthält das Wort „Test“ ein „e“? "Essen!" sagst du. Dann stelle ich Ihnen eine zweite Frage: Wie haben Sie den Buchstaben „e“ im Wort „test“ gefunden? Die Antwort liegt auf der Hand: Wir nehmen das erste Zeichen, also „t“, und vergleichen es mit dem, was wir suchen, also mit „e“. Wenn sie nicht gleich sind, nehmen wir das zweite Zeichen, also „e“, und vergleichen es mit dem, was wir suchen, also „e“. Voila! Es wurde eine Übereinstimmung gefunden. Antwort: Das Wort „test“ enthält den Buchstaben „e“.

Beantworten Sie mir jetzt noch eine Frage: Wo ist der reguläre Ausdruck in diesem Beispiel? Ich hoffe, Sie haben erraten, dass der reguläre Ausdruck hier das ist, was wir im Wort „test“ suchen. Das heißt, der Buchstabe „e“ in diesem Beispiel ist ein regulärer Ausdruck.

Wofür werden reguläre Ausdrücke in PHP verwendet? In meiner Praxis wurden beispielsweise reguläre Ausdrücke verwendet, um festzustellen, ob eine Adresse korrekt zusammengesetzt war E-Mail. Solche Ausdrücke werden auch verwendet, um die Richtigkeit des Benutzernamens und des Passworts zu bestimmen. Mithilfe regulärer Ausdrücke können Sie die Adresse in einem Link finden und speichern. Durch die Analyse können Sie die Hauptfunktion regulärer Ausdrücke und zwei Nebenfunktionen identifizieren. Hauptfunktion , dies ist eine Suche nach Übereinstimmungen in einer Zeichenfolge. Zu den Nebenwirkungen gehört das Speichern und Ersetzen der gefundenen Übereinstimmungen.

Erster regulärer Ausdruck

Theoretisch verstehen wir, wie man das Zeichen „e“ im Wort „test“ findet, aber wie wird dies in der Praxis umgesetzt? Um reguläre Ausdrücke in PHP zu verwenden, werden normalerweise die folgenden Funktionen verwendet:

preg_match("regulärer Ausdruck (Muster)", "Variable, in der die Suche durchgeführt wird", "Variable, in der das Suchergebnis gespeichert wird (optionaler Parameter)"); - Matching-Funktion
preg_replace("regulärer Ausdruck (Muster)", "Womit soll die gefundene Übereinstimmung ersetzt werden", "Variable, in der die Ersetzung vorgenommen wird"); - Funktion ersetzen

Beginnen wir mit der Verwendung dieser Funktionen. Hier ist ein Beispiel für die Suche nach dem Zeichen „e“ im Wort „test“:

$a = "test";
if(preg_match("/e/",$a)) echo "found!!";

Der Code beschreibt die Bedingung: Wenn in der Variablen $a etwas gefunden wird, das dem Muster entspricht, wird die Meldung „gefunden!!“ angezeigt. Wie Sie vielleicht bemerkt haben, befindet sich unsere Vorlage zwischen zwei „/“. IN in diesem Fall Symbol „/“ symbolisiert den Anfang und das Ende unseres Musters. Ich hoffe, das ist klar.

Das alles ist natürlich interessant ... aber unsere Vorlage ist sehr einfach, finden Sie nicht? Schließlich müssen wir selten ein Symbol in einer Variablen finden. In den meisten Fällen müssen wir viele und auch unbekannte Charaktere finden. Wie kann das sein? Stellen wir uns ein Problem und versuchen wir es zu lösen. Angenommen, wir haben eine Zeichenfolge, die aus Zahlen und einem unbekannten englischen Buchstaben besteht

Wie finde ich diesen Brief? Es könnte sich um einen beliebigen Buchstaben des englischen Alphabets handeln. Wie können Sie ihn identifizieren? Sie haben Ihre Frage selbst beantwortet, es gibt einen beliebigen Buchstaben, das heißt, er liegt im Bereich von a bis z. Sie können Bereiche in regulären Ausdrücken verwenden. Wenn wir nicht wissen, welches Zeichen wir suchen, wir aber sicher wissen, dass es sich bei diesem Zeichen um einen Buchstaben des englischen Alphabets handelt, dann sieht der Eintrag wie folgt aus:

$a = "123a321";
if(preg_match("//",$a)) echo "found!!";

Beachten Sie, dass der Bereich in „[“ „]“-Klammern eingeschlossen ist. Alles, was in solchen Klammern steht, ist definiert als eins Symbol, in diesem Fall reicht das Symbol von a bis z. Wenn wir keinen Buchstaben, sondern eine Zahl finden müssen, sieht der Eintrag so aus:

$a = "abc1cba";
if(preg_match("//",$a)) echo "found!!";

Ich möchte auch darauf hinweisen, dass bei regulären Ausdrücken die Groß-/Kleinschreibung beachtet wird, sodass die Zeichen „A“ und „a“ völlig unterschiedlich sind. Um nach beiden Zeichen zu suchen, schreiben Sie folgendermaßen:

$a = "123a321";
if(preg_match("//",$a)) echo "found!!";

Es gibt auch eine Suche nach russischen Buchstaben, die auf die gleiche Weise wie bei englischen durchgeführt wird:

$a = "123×321";
if(preg_match("/[a-zA-Z]/",$a)) echo "found!!";

Metazeichen

Wir haben gelernt, wie man nach einem unbekannten Zeichen in einer Zeichenfolge sucht. Was tun, wenn wir mehrere Charaktere finden müssen? Abhilfe schaffen sogenannte Metasymbole... Angenommen, wir haben eine Zeichenfolge mit Zahlen und Buchstaben, wie können wir sie in der Vorlage beschreiben? Sie können dies tun:

Linie - 123a321
Probe -

Hmm ... die Vorlage passt tatsächlich zu unserer Zeichenfolge, und wenn sie auf Übereinstimmung überprüft wird, wird sie das lang erwartete „true“ liefern! Aber es ist eine ziemlich umständliche Aufzeichnung, finden Sie nicht?

So kürzen Sie es:

Linie - 123a321
Probe - *

Es scheint mir, dass es kürzer ist. Was ist das „*“-Symbol? Dies ist das gleiche Metasymbol. Das bedeutet, dass das von uns beschriebene Symbol (nämlich ein Symbol, das Zahlen von 0 bis 9 oder Buchstaben des englischen Alphabets von a bis z enthalten kann) unbegrenzt oder mehr als einmal wiederholt werden kann. Ja ja! Dieses Metasymbol findet eine Übereinstimmung in einer leeren Variablen, da selbst das Fehlen des von uns beschriebenen Symbols „true“ zurückgibt! Denken Sie daran

Welche anderen Metazeichen gibt es?

Beispielsweise ähnelt das Metazeichen „+“ bis auf eine kleine Ausnahme fast dem Metazeichen „*“. „*“ gibt true zurück, auch wenn kein Zeichen vorhanden ist, und „+“ prüft, ob mindestens ein Zeichen vorhanden ist. Das heißt, wenn eine Leitung die Anwesenheit erfordert Minimum ein Zeichen, dann verwenden Sie „+“ statt „*“

Auch das Metazeichen „?“ wird häufig verwendet. Das bedeutet, dass die Zeile nicht mehr als ein gewünschtes Zeichen enthalten darf. Lassen Sie mich einige Beispiele für die letzten beiden Metazeichen geben, die ich beschrieben habe.

Angenommen, wir müssen das Passwort des Benutzers auf Richtigkeit überprüfen. Überlegen wir mal, was das Benutzerpasswort enthalten sollte? Nun, erstens muss es mindestens ein Zeichen sein. Zweitens darf er nur Zahlen und Buchstaben des englischen Alphabets enthalten, sodass der reguläre Ausdruck so aussieht:

$a = "qwerty12345";

Welche Charaktere haben wir zugelassen? Englische Buchstaben aller Groß- und Kleinschreibung und Zahlen. Versuchen Sie nun, anstelle des Passworts eine Leerzeile zu lassen.

$a = "";
if(preg_match("/+/",$a)) echo "Das Passwort ist korrekt";

Die Meldung „Passwort ist korrekt“ wird nicht angezeigt. Warum? Weil das Metazeichen „+“ die Zeichenfolge überprüft hat, um festzustellen, ob sie mindestens ein Zeichen enthält.

Und jetzt ein kleiner Trick, werfen wir einen Blick auf unseren Gesichtsausdruck, wir haben kein, sagen wir mal, Leerzeichen darin zugelassen, oder? Fügen Sie am Ende des Passworts ein Leerzeichen ein und führen Sie es aus

$a = "qwerty12345";
if(preg_match("/+/",$a)) echo "Das Passwort ist korrekt";

Und warum sehen wir unsere Meldung über das richtige Passwort? Es ist ganz einfach... Function preg_match(); stoppt die Prüfung beim ersten Treffer. Das heißt, das Symbol „q“ passt zu dem von uns beschriebenen Muster und alles andere ist für die Funktion nicht mehr wichtig. Was sollen wir tun? So beheben Sie das Problem:

$a = "qwerty12345";
if(preg_match("/^+$/",$a)) echo "Das Passwort ist korrekt";

Indem wir am Anfang eines Ausdrucks ein „^“ und am Ende ein „$“ hinzufügen, teilen wir der Funktion mit, mit welchem ​​Muster das Muster übereinstimmen soll alle Linie. Wenn Sie diesen Code ausführen, wird die Meldung nicht angezeigt, da sich am Ende des Kennworts ein unzulässiges Zeichen befindet – ein Leerzeichen

Ändern Sie nun das Metazeichen „+“ in das Metazeichen „?“. Was wird Ihrer Meinung nach passieren? Korrekterweise erfolgt keine Meldung über die Richtigkeit des Passworts, da das Passwort mehr als ein Zeichen enthält. Ich hoffe, ich habe die Funktionsweise dieser drei häufig verwendeten Metazeichen richtig erklärt

Manchmal ist „nicht“ besser

Wir haben zumindest gelernt, zu überprüfen, ob das Passwort korrekt ist, und das ist gut so! Lassen Sie mich Ihnen eine andere Möglichkeit vorstellen, in einer Zeichenfolge nach etwas zu suchen. Nehmen wir an, wir müssen prüfen, ob eine Zeichenfolge keine Zahlen enthält. Wie geht das? Hier ist die Zeile:

(Ich habe diese „-_+()“-Symbole speziell darin eingeführt, damit das Leben nicht wie Honig erscheint ...) Wir könnten den folgenden Ausdruck formulieren:

Aber Sie müssen zugeben, wir wissen nicht immer, welche Zeichen in einer Zeile verwendet werden, aber wir wissen mit Sicherheit, dass darin keine Zahlen stehen sollten! Es wäre daher logischer, einfach eine Vorlage zu schreiben, die Zeilen überspringt, in denen NEIN Zahlen, und nicht diejenigen, in denen es gibt „Oh mein Gott, wie viele unverständliche Symbole!!!“. Hier ist ein Beispiel für einen korrekt zusammengesetzten Ausdruck für solche Probleme:

$a = "a-_+()";
if(preg_match("/^[^0-9]+$/",$a)) echo "Keine Zahlen!";

Wie haben wir das erreicht? Wir haben das Symbol eingegeben Aber! Die am Anfang platzierte Kappe „^“ ([^0-9]) zeigt an, dass dies der Fall sein wird sollte nicht Ich hoffe, das wurde geklärt

Nun, lassen Sie es uns langsam zusammenfassen ... Ich gebe zwei Beispiele mit Erklärungen, in denen wir lernen, wie man das Suchergebnis in einer Variablen speichert und wie man die Postanschrift auf Richtigkeit überprüft

Ich habe es gesehen und gespeichert!

Mein Blog

$a = " Mein Blog";
preg_match("/ /", $a);

In unserem regulären Ausdruck haben wir alle möglichen Zeichen beschrieben, die in einem Link enthalten sein können. Ich möchte auch auf die Anführungszeichen und „/“-Zeichen in unserem Ausdruck achten. Ihnen ist ein Backslash vorangestellt. Wozu dient das? Tatsache ist, dass „/“ und das Anführungszeichen selbst Sonderzeichen sind. Und damit die Vorlage sie als gewöhnliche Symbole wahrnimmt, müssen wir sie durchleuchten. Die Bildschirmanpassung erfolgt durch das Einfügen eines Backslashs vor Sonderzeichen. Ich hoffe, es ist klar

$a = " Mein Blog";
preg_match("/ /", $a, $b);

Nun, dementsprechend ist es notwendig, einen zusätzlichen Parameter in Form der Variablen $b hinzuzufügen, in der der gefundene Link gespeichert wird. Sie müssen auch wissen, dass das Suchergebnis in einem Array platziert wird. Daher ist die Variable $b ein Array. Die gesuchten Informationen befinden sich unter Index 1. Das bedeutet, dass das Suchergebnis in der Variablen $b liegt. Lassen Sie uns das Ergebnis auf dem Bildschirm anzeigen:

$a = " Mein Blog";
preg_match("/ /", $a, $b);
echo $b;

Die richtige Adresse ist der Schlüssel zum Erfolg!

Und schließlich die Antwort auf die Frage: Ist die E-Mail korrekt? Zunächst müssen Sie herausfinden, welche Zeichen in Adressen zulässig sind. Zu den zulässigen Zeichen gehören meines Wissens nach:

  • Englische Buchstaben, Zahlen, „_“, „-“ ähm, alles scheint zu sein... Wir werden damit fortfahren.
  • Als nächstes haben wir „@“
  • Danach englische Buchstaben
  • Als nächstes Punkt
  • Und wieder englische Buchstaben...

Der reguläre Ausdruck sieht also wie folgt aus:

$a = " [email protected]";
if(preg_match("/^+@+.+$/", $a)) echo "E-Mail-Adresse ist korrekt!";
else echo „E-Mail-Adresse ist NICHT korrekt geschrieben!“;

Nun ja... ich hoffe, dass Ihnen solche Aufzeichnungen jetzt keine Angst machen und Sie sie durchaus verstehen können.

Abschließend möchte ich noch etwas sagen. Der Artikel erwies sich als umständlich und deckte gleichzeitig nur einen Teil der Möglichkeiten ab. Wenn Sie diesen Satz lesen, haben Sie ihn höchstwahrscheinlich bis zum Ende gelesen. Vielen Dank dafür

Bezüglich der Artikelserie über die Entwicklung eines CMS-Blogs, dem ersten Teil der Serie Ich erkläre es für geschlossen! In naher Zukunft werden wir mit der Implementierung des Admin-Panels beginnen, also wechseln Sie nicht. Wenn Sie Fragen haben, stehe ich Ihnen gerne zur Verfügung. Alles Gute für dich, das ist alles, was ich habe!

) Ich habe Ihnen ein Beispiel für die Verwendung regulärer Ausdrücke gezeigt, um bestimmte Teile des Quellcodes einer Seite zu finden. Jetzt lernen wir, wie man sie selbst schreibt. Diese Fähigkeit hilft Ihnen beim Schreiben, beim Löschen unnötiger Textfragmente, beim Suchen nach den erforderlichen Teilen in großen Textmengen usw.

Dieses Thema ist ziemlich kompliziert, aber ich werde versuchen, das Meiste kurz abzudecken wichtige Punkte. Ich weiß nicht, wie erfolgreich ich sein werde, aber ich hoffe, dass die Lektion nützlich sein wird.
Beginnen wir also mit der Tatsache, dass es in PHP mehrere Funktionen zum Arbeiten mit regulären Ausdrücken gibt, drei jedoch am häufigsten verwendet werden:

  • preg_replace – Text suchen und ersetzen, der einem regulären Ausdruck entspricht;
  • preg_match – nur eine normale Suche;
  • preg_split – Text suchen und teilen.

Zumindest haben wir sie in den vorherigen Lektionen verwendet. Genauer gesagt gab es anstelle von preg_match preg_match_all, aber das ist im Wesentlichen dasselbe, nur dass letzteres die Suche nach dem ersten Fund nicht unterbricht. Das heißt, wenn wir preg_match verwenden, finden wir nicht alle Vorkommen, sondern nur das erste.

Es ist ganz einfach, auszuwählen, welche Funktion in welcher Situation verwendet werden soll. Wir müssen ersetzen – wir verwenden ersetzen, wie in dem Fall, als wir unnötige Teile des Seitencodes entfernen mussten, erinnern Sie sich?

$page = preg_replace("/ ^]/i", "", $page); $page = preg_replace("/ ^]/i", "", $page); $page = str_replace("", "", $page);

Der erste Parameter der Funktion ist ein reguläres Zeichen, das bestimmt, wonach wir suchen. Das zweite ist, womit wir es ersetzen. Drittens – Wo suchen wir? Deshalb haben wir hier die Variable $page genommen und ihr das Ergebnis der preg_replace-Funktion zugewiesen, in der wir nach allen Eingaben vom Typ „type=checkbox“ sowie nach öffnenden und schließenden Beschriftungen gesucht haben. Sie haben sie durch " ersetzt, das heißt, sie haben sie einfach gelöscht. Ich hoffe, dass hier alles klar ist. Wir werden etwas später mit der Analyse des Ausdrucks selbst (dem ersten Parameter der Funktion) fortfahren.
Es gab auch ein Beispiel für die Verwendung von preg_match_all, das nützlich war, um alle Links im verbleibenden Text zu finden. Wir brauchten damals Links, weil sie die Schlüsselwörter enthielten, die wir analysierten. Folgendes ist passiert:

Preg_match_all("/ ]+?>(.*?)<\/a>/uis",$page,$ok); für ($j=0; $j „.$ok[$j].“"; }

Der erste Parameter ist wiederum ein regulärer Ausdruck, um alle Links zu finden, die natürlich im „a“-Tag eingeschlossen sind (wenn Sie mit HTML-Markup nicht vertraut sind, dann lesen Sie). Die zweite ist eine Variable, die den zu durchsuchenden Text enthält. Der dritte Parameter ist eine Variable, in der das Ergebnis abgelegt wird – $ok. Danach müssen wir nur noch alle notwendigen Elemente von $ok durchgehen, um die Schlüsselfänge zu erhalten, die wir brauchen. Unabhängig davon sollte gesagt werden, dass wir am Ausgang ein mehrdimensionales Array erhalten. Deshalb haben wir es so komplex dargestellt: $ok[$j]. Um die Struktur des Arrays anzuzeigen, verwenden Sie die folgende Funktion und Sie werden alles verstehen.

Print_r($ok);

Es scheint, dass wir die Funktionen, die wir für unsere Arbeit verwendet haben, geklärt haben. Jetzt müssen Sie nur noch lernen, wie man dieselben regulären Ausdrücke schreibt, die den ersten Parameter jeder dieser Methoden darstellen. Kommen wir zum Wichtigsten.

Wie schreibt man regelmäßige Sätze?

Schauen wir uns zunächst die Grundstrukturen an. Ausdrücke haben Optionen. Sie werden durch einen Buchstaben angegeben und am Ende mit einem vorangestellten Schrägstrich geschrieben.

Darüber hinaus werden folgende Metazeichen unterstützt:

Metazeichen wiederum können Modifikatoren haben:

Nun können wir mit der Analyse unserer regelmäßigen Muster aus der letzten Lektion fortfahren. Versuchen wir anhand der oben genannten Zeichen zu verstehen, was wir haben. Hier ist der Ausdruck:

/^]/i

Der erste und der letzte Schrägstrich „/“ zeigen an, dass sie einen regulären Ausdruck enthalten. Gleichzeitig ist dies nach dem letzten „i“ eine Option, wie in der ersten Tabelle – Groß- und Kleinschreibung nicht berücksichtigen. Innerhalb der Schrägstriche befindet sich die reguläre Sequenz selbst. Es beginnt mit dem Kleiner-als-Zeichen und dem Eingabe-Tag und allem, was danach kommt, bis das Punktzeichen nur noch reiner Text ist, nach dem gesucht werden muss. Interessanter sind jedoch der Punkt selbst und die darauf folgenden Symbole. In diesem Fall ist die Konstruktion „.*?“ bedeutet eine beliebige Zeichenfolge. Das heißt, wenn wir nur Text und diese Konstruktion kombinieren, wählen wir den gesamten Text vom ersten Vorkommen bis zum Ende aus. Um zu stoppen, müssen Sie entweder auf ein schließendes HTML-Tag „mehr als“ oder ein neues Zeilenzeichen stoßen. Dieses Design bietet uns genau diese Möglichkeit:

Die Zeichen in eckigen Klammern werden durch ein logisches ODER verbunden. Das Ende ist das Größer-als-Zeichen ODER der Anfang der Zeile.
Das ist der ganze Ausdruck, darin legen wir die Startbedingung, Mittel- und Endbedingung fest. Nicht schwer, oder? Hier ist eine Illustration zur Verdeutlichung:

Schauen wir uns noch eine Sache an, um alles zu festigen. Wir haben nach Links zu ihnen gesucht:

/]+?>(.*?)<\/a>/uis

Wir lesen den Ausdruck. Auch hier verwerfen wir zunächst Schrägstriche und Optionen. Die „uis“-Flags sind selbsterklärend, mit Ausnahme von „u“, das ich nicht beschrieben habe – es zeigt, dass wir Unicode-Codierung verwenden. Es ist nicht mehr viel übrig. Der Anfang ist das „a“-Tag, das geöffnet wird, dann kommt die Klasse

was NICHT größer oder kleiner als (öffnende und schließende HTML-Tags) bedeutet, d. h. in diesem Fall alle Zeichen. „+?“ wird zur Klasse hinzugefügt, was bedeutet, dass diese Klasse mindestens einmal vorhanden sein wird (mindestens jedoch mindestens einmal). Und dann kommt das schließende HTML-Tag für das „a“-Tag. Der Link enthält Text, der von der Gruppe angegeben wird

Schließlich wissen wir nicht, welche Art von Text dort sein wird, also definieren wir eine solche Gruppe. Und am Ende gibt es ein schließendes Tag „a“:

Bitte beachten Sie, dass wir den Schrägstrich durch einen Backslash maskieren, damit er als einfacher Text wahrgenommen wird.

Puh. Das Thema ist wirklich recht komplex, es erfordert Übung. Vielleicht mache ich etwas nicht ganz optimal und es ist möglich, andere, korrektere reguläre Ausdrücke zu erstellen, aber ich bin genauso Autodidakt wie Sie, also urteilen Sie nicht streng, sondern teilen Sie Ihre Optionen lieber in den Kommentaren mit. Auch wenn etwas nicht klar ist, stehen Ihnen die Kommentar- und Kontaktseite zur Verfügung.

Bei der Arbeit mit Texten in jeder modernen Programmiersprache stehen Entwickler ständig vor der Aufgabe, eingegebene Daten auf Übereinstimmung mit dem gewünschten Muster zu überprüfen, Testfragmente zu suchen und zu ersetzen und andere typische Vorgänge zur Verarbeitung symbolischer Informationen auszuführen. Die Entwicklung eigener Verifikationsalgorithmen führt zu Zeitverlust, Inkompatibilität des Programmcodes und Komplexität bei dessen Entwicklung und Modernisierung.

Die rasante Entwicklung der Internet- und WEB-Entwicklungssprachen erforderte die Schaffung universeller und kompakter Werkzeuge zur Verarbeitung von Textinformationen mit einem dafür erforderlichen Minimum an Code. Die PHP-Sprache, die bei Anfängern und professionellen Entwicklern beliebt ist, bildet da keine Ausnahme. Mit regulären Ausdrücken als Textvorlagensprache können Sie Textverarbeitungsaufgaben vereinfachen und den Programmcode um Dutzende oder Hunderte von Zeilen reduzieren. Viele Probleme lassen sich ohne sie nicht lösen.

Reguläre Ausdrücke in PHP

Die PHP-Sprache enthält drei Mechanismen zum Arbeiten mit regulären Ausdrücken – „ereg“, „mb_ereg“ und „preg“. Am gebräuchlichsten ist die „preg“-Schnittstelle, deren Funktionen Zugriff auf die PCRE-Bibliothek für reguläre Ausdrücke ermöglichen, die ursprünglich für die Perl-Sprache entwickelt wurde und in PHP enthalten ist. Preg-Funktionen durchsuchen eine bestimmte Textzeichenfolge nach Übereinstimmungen gemäß einem bestimmten Muster in der Sprache regulärer Ausdrücke.

Syntax-Grundlagen

In einem kurzen Artikel ist es unmöglich, die gesamte Syntax regulärer Ausdrücke im Detail zu beschreiben; es gibt hierzu spezielle Literatur. Wir stellen nur die Hauptelemente vor, um die vielfältigen Möglichkeiten für den Entwickler aufzuzeigen und die Codebeispiele zu verstehen.

B ist formal sehr komplex definiert, daher vereinfachen wir die Beschreibung. Ein regulärer Ausdruck ist eine Textzeichenfolge. Es besteht aus einem durch Trennzeichen getrennten Muster und einem Modifikator, der angibt, wie es verarbeitet werden soll. Es besteht die Möglichkeit, verschiedene Alternativen und Wiederholungen in die Vorlagen einzubinden.

Zum Beispiel im Ausdruck /\d(3)-\d(2)-\d(2)/m Das Trennzeichen wird sein «/» , dann kommt das Muster und das Symbol "M" wird ein Modifikator sein.

Die gesamte Leistungsfähigkeit regulärer Ausdrücke wird mithilfe von Metazeichen codiert. Das wichtigste Metazeichen der Sprache ist der Backslash – „\“. Es kehrt den Typ des darauf folgenden Zeichens um (d. h. ein reguläres Zeichen wird zu einem Metazeichen und umgekehrt). Ein weiteres wichtiges Metazeichen ist der Schrägstrich „|“, der alternative Variationen des Musters angibt. Weitere Beispiele für Metazeichen:

Bei der Verarbeitung regulärer Ausdrücke behandelt PHP das Leerzeichen als separates signifikantes Zeichen, sodass die Ausdrücke ABCWHERE und ABCWHERE unterschiedlich sind.

Untermuster

In PHP werden reguläre Untermuster durch Klammern getrennt und manchmal „Unterausdrücke“ genannt. Führen Sie die folgenden Funktionen aus:

    Alternativen hervorheben. Zum Beispiel Vorlage Hitze(etwas|Vogel|) passt zu den Wörtern „Hitze“, „Feuervogel“ Und "braten". Und ohne die Klammern wäre es nur eine leere Zeichenfolge, „bird“ und „roast“.

    „Aufregendes“ Untermuster. Das heißt, wenn ein Teilstring im Muster übereinstimmt, werden alle Übereinstimmungen als Ergebnis zurückgegeben. Zur Verdeutlichung geben wir ein Beispiel. Gegeben sei der folgende reguläre Ausdruck: der Gewinner erhält((golden|vergoldet)(Medaille|Pokal)) - und eine Zeile zum Finden von Übereinstimmungen: „Der Gewinner erhält eine Goldmedaille“. Zusätzlich zur Originalphrase wird als Suchergebnis Folgendes zurückgegeben: „Goldmedaille“, „Medaille“, „Gold“.

Wiederholungsoperatoren (Quadrifizierer)

Beim Schreiben regulärer Ausdrücke ist es oft notwendig, Wiederholungen von Zahlen und Symbolen zu analysieren. Bei wenigen Wiederholungen stellt dies kein Problem dar. Aber was tun, wenn wir ihre genaue Anzahl nicht kennen? In diesem Fall müssen Sie spezielle Metazeichen verwenden.

Um Wiederholungen zu beschreiben, werden Quadrifizierer verwendet – Metasymbole zur Angabe der Menge. Es gibt zwei Arten von Quadrifizierern:

  • allgemein, in Klammern eingeschlossen;
  • abgekürzt.

Der allgemeine Quantor gibt die minimale und maximale Anzahl zulässiger Wiederholungen eines Elements an, ausgedrückt als zwei Zahlen in geschweiften Klammern, etwa so: x(2,5). Wenn die maximale Anzahl der Wiederholungen unbekannt ist, wird das zweite Argument weggelassen: x(2,).

Kurzschrift-Quantoren stellen Symbole für die häufigsten Wiederholungen dar, um unnötiges Durcheinander in der Syntax zu vermeiden. Gebräuchlich sind drei Abkürzungen:

1. * – null oder mehr Wiederholungen, was (0,) entspricht.

2. + - eine oder mehrere Wiederholungen, d. h. ,).

3. ? - Null oder nur eine Wiederholung - (0,1).

Beispiele für reguläre Ausdrücke

Für diejenigen, die reguläre Ausdrücke lernen, sind Beispiele das beste Tutorial. Wir stellen einige vor, die mit minimalem Aufwand ihr breites Leistungsspektrum unter Beweis stellen. Alle Programmcodes sind vollständig kompatibel mit PHP-Versionen 4.x und höher. Um die Syntax vollständig zu verstehen und alle Funktionen der Sprache zu nutzen, empfehlen wir das Buch „Regular Expressions“ von J. Friedl, das die Syntax ausführlich bespricht und Beispiele für reguläre Ausdrücke nicht nur in PHP, sondern auch für Python, Perl, MySQL enthält. Java, Ruby und C#.

Überprüfung der Richtigkeit der E-Mail-Adresse

Aufgabe. Es gibt eine Internetseite, die den Besucher nach einer E-Mail-Adresse fragt. Der reguläre Ausdruck muss vor dem Senden von Nachrichten prüfen, ob die empfangene Adresse korrekt ist. Die Prüfung garantiert nicht, dass das angegebene Postfach tatsächlich existiert und Briefe annimmt. Aber es kann offensichtlich falsche Adressen aussortieren.

Lösung. Wie bei jeder Programmiersprache können reguläre Ausdrücke zur PHP-E-Mail-Adressüberprüfung auf verschiedene Arten implementiert werden, und die Beispiele in diesem Artikel sind nicht das A und O. Daher stellen wir jeweils eine Liste der Anforderungen bereit, die bei der Programmierung berücksichtigt werden müssen, und die konkrete Umsetzung hängt ganz vom Entwickler ab.

Ein Ausdruck, der prüft, ob eine E-Mail gültig ist, muss also die folgenden Bedingungen prüfen:

  1. Das Vorhandensein des @-Symbols in der Quellzeichenfolge und das Fehlen von Leerzeichen.
  2. Der Domänenteil der Adresse, gefolgt vom @-Symbol, enthält nur gültige Zeichen für Domänennamen. Gleiches gilt für den Benutzernamen.
  3. Bei der Überprüfung eines Benutzernamens müssen Sie auf Sonderzeichen wie Apostrophe oder Apostrophe achten. Diese Zeichen sind potenziell gefährlich und können für Angriffe wie SQL-Injection verwendet werden. Vermeiden Sie solche Adressen.
  4. Benutzernamen erlauben nur einen Punkt, der nicht das erste oder letzte Zeichen in der Zeile sein darf.
  5. Der Domainname muss mindestens zwei und höchstens sechs Zeichen enthalten.

Ein Beispiel, das alle diese Bedingungen berücksichtigt, ist unten in der Abbildung zu sehen.

Überprüfung der Gültigkeit von URLs

Aufgabe.Überprüfen Sie, ob eine bestimmte Textzeichenfolge gültig ist. Auch hier können reguläre Ausdrücke zur URL-Prüfung auf verschiedene Arten implementiert werden.

Lösung. Unsere finale Version sieht so aus:

/^(https?:\/\/)?([\da-z\.-]+)\.((2,6))([\/\w \.-]*)*\/?$ /

Schauen wir uns nun seine Komponenten anhand der Abbildung genauer an.

Kreditkartennummern prüfen

Aufgabe. Für die gängigsten Zahlungssysteme ist es notwendig, die Richtigkeit der eingegebenen Plastikkartennummer zu überprüfen. Option gilt nur für Karten

Lösung. Beim Erstellen eines Ausdrucks müssen Sie das mögliche Vorhandensein von Leerzeichen in der eingegebenen Zahl berücksichtigen. Die Zahlen auf der Karte sind in Gruppen unterteilt, um das Lesen und Diktieren zu erleichtern. Daher ist es ganz natürlich, dass jemand versucht, die Zahl auf diese Weise einzugeben (d. h. mit Leerzeichen).

Einen universellen Ausdruck zu schreiben, der mögliche Leerzeichen und Bindestriche berücksichtigt, ist schwieriger, als einfach alle Zeichen außer Zahlen zu verwerfen. Daher wird empfohlen, im Ausdruck das Metazeichen /D zu verwenden, das alle Zeichen außer Zahlen entfernt.

Jetzt können Sie direkt mit der Überprüfung der Nummer fortfahren. Alle Kreditkartenunternehmen verwenden ein eindeutiges Zahlenformat. Das Beispiel nutzt dies und der Kunde muss den Firmennamen nicht eingeben, sondern wird durch die Nummer bestimmt. Visa-Karten beginnen immer mit 4 und haben eine Zahlenlänge von 13 oder 16 Ziffern. MasterCard beginnt im Bereich 51-55 mit einer Zahlenlänge von 16. Als Ergebnis erhalten wir den folgenden Ausdruck:

Vor der Bearbeitung einer Bestellung können Sie zusätzlich eine Prüfung der letzten Ziffer der Nummer durchführen, die mithilfe des Luhn-Algorithmus berechnet wird.

Telefonnummern prüfen

Aufgabe.Überprüfung der Richtigkeit der eingegebenen Telefonnummer.

Lösung. Die Anzahl der Ziffern in Festnetz- und Mobiltelefonnummern variiert erheblich von Land zu Land, sodass eine universelle Überprüfung der Richtigkeit einer Telefonnummer mithilfe regulärer Ausdrücke nicht möglich ist. Internationale Nummern haben jedoch ein strenges Format und eignen sich hervorragend zur Vorlagenprüfung. Darüber hinaus versuchen immer mehr nationale Telefonbetreiber, einen einheitlichen Standard einzuhalten. Die Struktur der Zahl ist wie folgt:

+CCC.NNNNNNNNNNxEEEE, Wo:

C ist der Ländercode, bestehend aus 1-3 Ziffern.

N – bis zu 14-stellige Zahl.

E – optionale Erweiterung.

Das Pluszeichen ist ein erforderliches Element und das x-Zeichen ist nur vorhanden, wenn eine Erweiterung erforderlich ist.

Als Ergebnis erhalten wir den folgenden Ausdruck:

^\+(1,3)\.(4,14)(?:x.+)?$

Zahlen im Bereich

Aufgabe. Sie müssen eine Ganzzahl innerhalb eines bestimmten Bereichs finden. Darüber hinaus ist es erforderlich, dass die regulären Ausdrücke nur mit Zahlen aus einem Wertebereich übereinstimmen.

Lösung. Hier sind einige Ausdrücke für einige der häufigsten Fälle:

Finden einer IP-Adresse

Aufgabe. Sie müssen feststellen, ob die angegebene Zeichenfolge eine gültige IP-Adresse im IPv4-Format im Bereich 000.000.000.000-255.255.255.255 ist.

Lösung. Wie bei jeder Aufgabe in PHP gibt es auch bei regulären Ausdrücken viele Variationen. Zum Beispiel dies:

Online-Ausdrucksprüfung

Das Testen regulärer Ausdrücke auf Korrektheit kann für neue Programmierer aufgrund der Komplexität der Syntax, die sich von „normalen“ Programmiersprachen unterscheidet, schwierig sein. Um dieses Problem zu lösen, gibt es viele Online-Ausdruckstester, mit denen sich die Richtigkeit der erstellten Vorlage anhand von echtem Text leicht überprüfen lässt. Der Programmierer gibt den zu testenden Ausdruck und die Daten ein und sieht sofort das Verarbeitungsergebnis. Meist gibt es auch einen Referenzteil, in dem reguläre Ausdrücke, Beispiele und Implementierungsunterschiede für die gängigsten Programmiersprachen ausführlich beschrieben werden.

Aber nicht allen Entwicklern, die PHP verwenden, wird empfohlen, den Ergebnissen von Online-Diensten völlig zu vertrauen. Ein persönlich geschriebener und getesteter regulärer Ausdruck verbessert Ihre Fähigkeiten und garantiert die Fehlerfreiheit.


Eine der sehr leistungsstarken und nützlichen Funktionen der PHP-Sprache ist die Unterstützung regulärer Ausdrücke. Viele Programmierer, sowohl Anfänger als auch ziemlich erfahrene, sind von der scheinbaren Komplexität und Komplexität der Sprache für reguläre Ausdrücke eingeschüchtert. Aber ich kann Ihnen versichern – es lohnt sich. Die Verwendung regulärer Ausdrücke vereinfacht die Verarbeitung von Texten und schwach strukturierten Daten erheblich.


Reguläre Ausdrücke sind Ausdrücke, die in einer speziellen Sprache geschrieben sind. Seien Sie nicht beunruhigt, die Sprache ist recht einfach zu verstehen. Sie benötigen lediglich Erfahrung und Übung.


Ich denke, Sie sind immer wieder auf Situationen gestoßen, in denen Sie Text haben (z. B. in Microsoft Word) und darin etwas Wichtiges finden müssen. Wenn Sie genau wissen, wonach Sie suchen, ist alles ganz einfach: Suchdialog aufrufen, Suchwort eingeben, Button drücken und voilà – der Text ist gefunden.


Aber was machen Sie, wenn Sie nur im Voraus wissen, nach welcher Art von Informationen Sie suchen? Sie stehen beispielsweise vor der Aufgabe, alle E-Mail-Adressen in einem Dokument mit mehreren hundert Blättern zu finden. Manche sehen sich das Dokument manuell an, andere geben den Hund (@) in die Suche ein und suchen danach. Stimmen Sie zu – beide Optionen sind eine mühsame, undankbare Arbeit.

Hier helfen reguläre Ausdrücke. In gewisser Weise können reguläre Ausdrücke mit Masken oder Vorlagen verglichen werden, die dem Text überlagert werden: Wenn der Text mit der Maske übereinstimmt, handelt es sich um das gewünschte Fragment. Doch bevor wir uns mit der Verwendung regulärer Ausdrücke befassen, machen wir uns mit deren Syntax vertraut.

Ein regulärer Ausdruck ist eine Textzeichenfolge, die nach bestimmten Gesetzen und Regeln zusammengesetzt ist. Eine Zeichenfolge besteht aus Zeichen und Zeichengruppen, Metazeichen, Quantoren und Modifikatoren.

In diesem Fall sind mit Symbolen alle Symbole eines beliebigen Alphabets gemeint. Und nicht nur lesbare. Sie können problemlos ein unleserliches Zeichen in einen Ausdruck einfügen. Dazu müssen Sie lediglich dessen Code in hexadezimaler Form kennen. Zum Beispiel:

// lesbare Zeichen a E // unlesbare Zeichen und Codes \x41 – das Gleiche wie der Buchstabe „A“ \x09 – Tabulatorzeichen

Eine Zeichengruppe besteht aus mehreren nacheinander geschriebenen Zeichen:

Durchschn. ACZms

Ich möchte Sie gleich darauf aufmerksam machen: Auch das „Leerzeichen“ in regulären Ausdrücken wird als signifikantes Zeichen betrachtet, seien Sie also beim Schreiben von Ausdrücken vorsichtig. Diese Zeichengruppen sind beispielsweise VERSCHIEDENE Ausdrücke:

ABC WO ABC WO

Das nächste Element der Sprache sind Metazeichen. Das Präfix „meta“ bedeutet, dass diese Symbole einige andere Symbole oder deren Gruppen beschreiben. Die Tabelle beschreibt die wichtigsten Metazeichen der regulären Ausdruckssprache:

Metazeichen zur Angabe von Sonderzeichen
() Klammern. Definiert verschachtelte Ausdrücke.
| Auswahl-Metazeichen
^ Metazeichen für den Zeilenanfang
$ Metazeichen am Zeilenende
\N Zeilenvorschubzeichen (Hex-Code 0x0A)
\R Wagenrücklaufzeichen (Hex-Code 0x0D)
\T Tabulatorzeichen (Hex-Code 0x09)
\xhh Wenn Sie ein Zeichen mit dem Hexadezimalcode 0xhh einfügen, zum Beispiel \x42, wird der lateinische Buchstabe „B“ eingefügt.
Metazeichen zur Angabe von Zeichengruppen
. Punkt. Jeder Charakter.
\D Ziffer (0-9)
\D Keine Zahl (beliebiges Zeichen außer den Zeichen 0–9)
\S Leerzeichen (normalerweise Leerzeichen und Tabulator)
\S Nicht leeres Zeichen (alle außer Zeichen, die durch das Metazeichen \s identifiziert werden)
\w Ein „Wörterbuch“-Zeichen (ein Zeichen, das in Wörtern verwendet wird. Normalerweise alle Buchstaben, alle Zahlen und ein Unterstrich („_“))
\W Alle außer Zeichen, die durch das Metazeichen \w definiert sind

Die Metazeichen aus der zweiten Tabellenhälfte sind sehr leicht zu merken. „d“ – Ziffer (Ziffer), „s“ – Symbol (Symbol), „w“ – Wort (Wort). Wenn der Buchstabe groß ist, müssen Sie der Gruppenbeschreibung „NOT“ hinzufügen.

Nehmen wir zum Beispiel den Text „Das rote Trikot hat die Nummer 1812 und das grüne Trikot hat die Nummer 2009.“ Schauen wir uns Beispiele der einfachsten regulären Ausdrücke an:

\d\d\d\d – findet 1812 und 2009 \D – findet alle Buchstaben, Leerzeichen und Satzzeichen \s – findet alle Leerzeichen im Text.

Aber das Jahr in unserem Beispiel kann nicht vier-, sondern zweistellig geschrieben werden, Wörter können andere Deklinationen usw. haben. Hier können Teilmengen von Zeichen helfen, die mit eckigen Klammern angegeben werden:

Bedeutet eine beliebige Ziffer (dasselbe wie \d) – bedeutet eine gerade Ziffer – bedeutet ein beliebiges Symbol des lateinischen Alphabets (auf jeden Fall) oder eine Ziffer.

Beispielsweise findet der Ausdruck \d\d\d in der Testzeichenfolge nur 1812, nicht jedoch 2009. Dieser Ausdruck sollte wie folgt gelesen werden: „Finde alle Folgen von vier Ziffern, bei denen die letzte Ziffer 0,2,4,6 oder ist.“ 8".

Uns bleibt nur noch die Erwähnung von Quantoren und Modifikatoren.

Quantor ist eine spezielle Konstruktion, die bestimmt, wie oft ein Zeichen oder eine Zeichengruppe vorkommen muss. Der Quantor wird in geschweiften Klammern „()“ geschrieben. Zwei Aufnahmeformate sind möglich: Präzision und Reichweite. Genau Das Format wird wie folgt geschrieben:

Dabei ist X die Häufigkeit, mit der das vorherige Symbol oder die vorherige Gruppe wiederholt werden muss. Zum Beispiel der Ausdruck

Die zweite Form der Aufzeichnung ist die Reichweite. Aufgezeichnet als

(X, Y) // oder (,Y) // oder (X,)

Dabei ist X die minimale und Y die maximale Anzahl an Wiederholungen. Zum Beispiel:

gelesen als „zwei bis vier Ziffern hintereinander geschrieben“. Wenn eine der Grenzen nicht angegeben ist, wird keine Einschränkung angenommen. Zum Beispiel:

\w(3,) – drei oder mehr Buchstaben. \d(,5) - es gibt überhaupt keine Zahlen, oder es gibt sie, aber nicht mehr als fünf.

Quantifizierer können entweder auf ein einzelnes Zeichen oder eine Gruppe angewendet werden:

[A-Yaa-ya](1,3)

Diese Konstruktion wählt aus dem Text alle russischen Wörter mit einem, zwei oder drei Buchstaben aus (z. B. „oder“, „nicht“, „ich“, „ich gehe“ usw.).

Zusätzlich zu den geschweiften Klammern gibt es drei weitere Quantifizierer-Metazeichen: „*“ (Sternchen), „+“ (Plus) und „?“ (Frage). Sie werden in Fällen eingesetzt, in denen die minimale und maximale Anzahl der erforderlichen Wiederholungen im Voraus nicht bekannt ist. Wenn Sie beispielsweise nach E-Mail-Adressen suchen, können Sie nicht im Voraus sagen, wie viele Zeichen der Benutzername (vor „Hund“) und wie viele Zeichen der Domainname (nach „Hund“) enthalten wird.

Das Metazeichen „*“ wird als „beliebiger Betrag von Null oder mehr“ gelesen, d. h. Design

definiert eine beliebige Anzahl aufeinanderfolgender Buchstaben, einschließlich deren vollständiges Fehlen.

Das „+“-Symbol unterscheidet sich von einem Sternchen nur dadurch, dass es das Vorhandensein von mindestens einem Zeichen erfordert. Diese. Design

Entspricht jeder digitalen Sequenz mit einer oder mehreren Ziffern.

Symbol „?“ entspricht der Abwesenheit oder Anwesenheit eines einzelnen Zeichens. Diese. Design

entspricht jeder digitalen Sequenz mit einer oder zwei Ziffern.

Hier ist ein Merkmal der Antifizierer „*“ und „+“ zu erwähnen Gier. Der Punkt ist, dass diese Zeichen standardmäßig der längstmöglichen Zeichenfolge entsprechen. Zum Beispiel für die Zeile „Mama hat den Rahmen gewaschen“ der Ausdruck:

Ich werde „Mama Soap Ra“ wählen, was etwas unerwartet ist, da wir erwartet hatten, dass wir „Ma“ bekommen würden. Um dieses Verhalten zu ändern, verwenden Sie das Metazeichen „?“ (Fragezeichen) wird unmittelbar nach dem Quantor geschrieben. Es schränkt den „Appetit“ von Quantifizierern ein, indem es sie dazu zwingt, die erste Übereinstimmung und nicht die längste zurückzugeben. Ändern wir nun das vorherige Beispiel:

und erhalten Sie die erforderliche Übereinstimmung „ma“.

Das letzte Element der Sprache ist Modifikatoren. Ein Modifikator ist ein Sonderzeichen, das die „System“-Parameter für die Analyse regulärer Ausdrücke definiert. Es gibt nur vier solcher Symbole, sie können entweder einzeln oder gleichzeitig verwendet werden:

ich Aktiviert den Modus ohne Berücksichtigung der Groß-/Kleinschreibung, d. h. Groß- und Kleinschreibung im Ausdruck unterscheiden sich nicht.
M Gibt an, dass der durchsuchte Text so behandelt werden soll, als ob er aus mehreren Zeilen besteht. Standardmäßig behandelt die Engine für reguläre Ausdrücke Text als einzelne Zeichenfolge, unabhängig davon, was er tatsächlich ist. Dementsprechend geben die Metazeichen „^“ und „$“ den Anfang und das Ende des gesamten Textes an. Wenn dieser Modifikator angegeben ist, geben sie jeweils den Anfang und das Ende jeder Textzeile an.
S Das Standard-Metazeichen ist „.“ enthält das Newline-Zeichen nicht in seiner Definition. Diese. Bei mehrzeiligem Text gibt der Ausdruck /.+/ nur die erste Zeile zurück, nicht wie erwartet den gesamten Text. Durch die Angabe dieses Modifikators wird diese Einschränkung aufgehoben.
U Macht alle quantitativen Metazeichen standardmäßig „nicht gierig“. In einigen Modifikationen der Sprache (insbesondere in PHP) wird anstelle von „U“ das Zeichen „g“ verwendet, was der Bedeutung besser entspricht („g“ ist die Abkürzung für das englische „greedy“, „greedy“ ).

Die Tabelle zeigt die beliebtesten und notwendigsten Beispiele für reguläre Ausdrücke. Einige davon mögen Ihnen kompliziert und umständlich erscheinen, aber wenn Sie sie genauer studieren, werden Sie sie zweifellos verstehen.

Reguläre Ausdrücke in PHP.

Für die Arbeit mit regulären Ausdrücken in PHP gibt es spezielle Funktionen, die in der Tabelle aufgelistet und kurz beschrieben sind:

int preg_match (String-Muster, String-Betreff [, Array-Matches])

Die Funktion prüft, ob der Inhalt des Betreffs mit dem Mustermuster übereinstimmt. Gibt 1 zurück, wenn Übereinstimmungen gefunden werden, andernfalls wird 0 zurückgegeben. Wenn Sie den optionalen Array-Parameter „Matches“ angeben, wird bei Ausführung der Funktion ein einzelnes Element darin eingegeben – die erste gefundene Übereinstimmung.

"; print_r($found); ?>

int preg_match_all (String-Muster, String-Betreff, Array-Matches [, int-Reihenfolge])
Die Funktion ist mit der vorherigen identisch, mit dem einzigen Unterschied, dass sie den gesamten Text durchsucht und ALLE im Matches-Array gefundenen Treffer zurückgibt.
gemischt preg_replace (gemischtes Muster, gemischte Ersetzung, gemischtes Subjekt [, int limit])
Wie seine beiden Vorgängerfunktionen sucht preg_replace nach einem Textstück, das einem Muster entspricht. Die Funktion ersetzt alle gefundenen Fragmente durch den in den Parametern angegebenen Text.Vor der Reinigung:\n$text\n\n"; $text = preg_replace("/(\n \s(2,))/"," ",$text); echo " Nach der Reinigung:\n$text"; // zeigt den Text ohne Sonderzeichen // und zusätzliche Leerzeichen an?>
gemischt preg_replace_callback (gemischtes Muster, gemischter Rückruf, gemischtes Betreff [, int limit])
Die Funktion ist eine erweiterte Version der vorherigen. Der Hauptunterschied besteht darin, dass dieser Funktion in den Parametern der Name der Funktion übergeben wird, die den Text analysiert und Ersatztext generiert.
Array preg_split (Stringmuster, Stringsubjekt [, int limit [, int flags]])
Diese Funktion ähnelt den Funktionen explosion() und split(). Seine Besonderheit besteht darin, dass das Trennzeichen keine feste Zeichenfolge, sondern ein regulärer Ausdruck ist. Die Funktion teilt die Quelldaten in Elemente auf und platziert sie im Ausgabearray.
Array preg_grep (String-Muster, Array-Eingabe)
Die Funktion ist für die reguläre Suche in Arrays konzipiert. Für die Suche werden eine Vorlage und ein Array von Eingabedaten angegeben und ein Array zurückgegeben, das nur aus Elementen besteht, die mit der Vorlage übereinstimmen.

Die Liste der betrachteten Funktionen ist bei weitem nicht vollständig, reicht aber für einen erfolgreichen Einstieg in die Arbeit mit regulären Ausdrücken völlig aus. Wenn Sie sich für dieses Thema interessieren, lesen Sie unbedingt weiterführende Literatur (z. B. Friedls Buch „Reguläre Ausdrücke“). Darüber hinaus empfehle ich zu Schulungszwecken die Installation eines der speziellen Programme zum Testen regulärer Ausdrücke (z. B. „PCRE“ oder „RegEx Builder“).

1,6K

Reguläre Ausdrücke (abgekürzt als Regex) sind Zeichenfolgen, die Suchmuster bilden. Sie werden hauptsächlich in String-Matching-Mustern verwendet.

Kurze Geschichte

  • Alles begann in den 1940er bis 1960er Jahren, als viele kluge Leute über reguläre Ausdrücke sprachen;
  • 1970er Jahre g/re/p;
  • 1980 Perl und Henry Spencer;
  • 1997 PCRE (Perl-kompatible reguläre Ausdrücke). Zu diesem Zeitpunkt begann der Aufstieg dessen, was wir reguläre Ausdrücke nennen. PCRE bietet Bibliotheken für fast jede Sprache.

Allgemeine Verwendung regulärer Ausdrücke in PHP

PHP enthält drei Hauptfunktionen für die Arbeit mit PCRE: preg_match, preg_match_all und preg_replace.

Compliance-Vergleich

Der Ausdruck gibt 1 zurück, wenn eine Übereinstimmung vorliegt, 0, wenn nicht, und false, wenn ein Fehler auftritt:

int preg_match (string $pattern, string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]])

Ein Beispiel für einen regulären Ausdruck, der die Anzahl der gefundenen Übereinstimmungen zurückgibt:

int preg_match_all (string $pattern, string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]])

Ersatz

Der Ausdruck gibt die ersetzte Zeichenfolge oder das ersetzte Array zurück ( basierend auf $subject):

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

Allgemeine Verwendung regulärer Ausdrücke in JavaScript

Reguläre Ausdrücke in JavaScript sehen fast genauso aus wie in PHP.

Compliance-Vergleich

Gibt ein Array von Übereinstimmungen zurück oder null, wenn keine Übereinstimmungen gefunden werden:

string.match(RegExp);

Ersatz

Ein regulärer Ausdruck, der eine Zeichenfolge mit den vorgenommenen Ersetzungen zurückgibt:

string.replace(RegExp, Ersatz);

Funktionen regulärer Ausdrücke in JavaScript

  • Ein Punkt stimmt nie mit einem Zeilenumbruch überein:
  • Dieselben Methoden zum Vergleichen von Übereinstimmung und Ersetzung über reguläre Ausdrücke wie ohne sie.

Prinzipien zum Erstellen regulärer Ausdrucksmuster

Schauen wir uns ein Beispiel an, in dem wir E-Mail-Adressen in einer Codebasis finden müssen. Unser Ziel:

Analoge Steckdosen

Reguläre Ausdrücke bestehen aus zwei Arten von Zeichen:

  • Sonderzeichen: ? * + () () ^ $ / .
  • Literale.

Stellen Sie sich die Eingabestränge als Schrauben und die Vorlage als eine Reihe von Verbindungselementen dafür vor (in der entsprechenden Reihenfolge).

Sonderzeichen

Wenn Sie reguläre Ausdrücke testen, müssen Sie wissen, wie Sonderzeichen funktionieren:

  • Das Backslash-Zeichen \ kann ein anderes Sonderzeichen in einem regulären Ausdruck ersetzen:
  • Punkt und w - .

Entspricht allen Zeichen außer Zeilenumbrüchen. Wenn Sie die Übereinstimmung mit einem Punkt und nur einem Punkt überprüfen möchten – , auf Übereinstimmung mit Buchstaben, Zahlen und Unterstrichen – w

  • Eckige Klammern.

Ordnen Sie die Zeichen in Klammern zu. Unterstützt Bereiche. Einige Beispiele:
o – entspricht jedem a, b oder c.
o Großbuchstaben.
o eine beliebige Zahl.
o – Entspricht jedem Klein- oder Großbuchstaben des Alphabets.
Optional? Entspricht 0 oder 1.
Sternchen *.

Ein Sternchen bedeutet 0 oder mehr Zeichen.

Entspricht einem oder mehreren Zeichen.

Geschweifte Klammern ().

Minimal- und Maximalwerte. Einige Beispiele für die Syntax regulärer Ausdrücke:
o (1,) nicht weniger als 1.
o (1,3) von 1 bis 3.
o (1,64) von 1 bis 64.

Fügen wir das alles hinzu, um einen regulären Ausdruck für E-Mail-Adressen zu erhalten:

/+@+(.+)*/i


So sieht es in PHP aus:

preg_match_all("/+@+(.+)*/i", $input_lines, $output_array);

Verwendung eines regulären Ausdrucks zur Validierung

Herausforderung: Stellen Sie sicher, dass die Eingabedaten unseren Erwartungen entsprechen. Ziel 1: /[^w$.]/ Ziel 2: /^(1,2)$/

Reguläre Ausdrücke eignen sich gut zum Suchen von Elementen, Sie müssen jedoch genau wissen, wonach Sie suchen.

Wann sollten Sie zur Validierung keinen regulären Ausdruck verwenden?

Viele Fälle lassen sich besser mit der PHP-Funktion filter_var handhaben. Beispielsweise sollte die Validierung der E-Mail-Adresse mithilfe der in PHP integrierten Filter erfolgen:

filter_var(" [email protected]", FILTER_VALIDATE_EMAIL)

Validierung mit regulären Ausdrücken

Reguläre Ausdrücke am Ende einer Zeile verwenden Anker:

^ – gibt den Anfang einer Zeile an.
$ ist ein Dollarzeichen, das das Ende einer Zeile anzeigt.

if (!preg_match("%^(1,2)$%", $_POST["subscription_frequenz"])) ( $isError = true; )

Ausgeschlossene Zeichenklassen

[^abc] – alles außer a, b oder c, einschließlich Zeilenumbrüchen.

Ein Beispiel, bei dem Sie nur alphanumerische Zeichen, Bindestriche, Punkte und Unterstriche eingeben können:

if (preg_match("/[^0-9a-z-_.]/i", $productCode)) ( $isError = true; )

Suchen und ersetzen

Die gebräuchlichsten PCRE-Funktionen zum Durchführen von Suchen und Ersetzen sind preg_replace() und preg_replace_callback() . Es gibt aber auch preg_filter() und preg_replace_callback_array(), die fast das Gleiche tun. Bitte beachten Sie, dass die Funktion preg_replace_callback_array() seit PHP7 verfügbar ist.

Ersetzen Sie Wörter in einer Liste

$subject = „Ich möchte ein paar Äpfel essen.“; echo preg_replace("/apple|banana|orange/", "fruit", $subject);

Ergebnis

Ich möchte ein paar Früchte essen.

Wenn ein regulärer Ausdruck Untermuster hat ( in Klammern), können Sie $N oder N ersetzen (wobei N ist eine ganze Zahl >= 1), wird dies als „Backlink“ bezeichnet.

Zwei Zahlen neu anordnen

$subject = "7/11"; echo preg_replace("/(d+)/(d+)/", "$2/$1", $subject);

Ergebnis

Datumsformatierung ändern

$subject = "2001-09-11"; echo preg_replace("/(d+)-(d+)-(d+)/", "$3/$2/$1", $subject);

Ergebnis

Ein einfaches Beispiel für das Ersetzen einer URL in einem Tag

$subject = "Bitte besuchen Sie https://php.earth/doc für weitere Artikel."; echo preg_replace("#(https?://([^s./]+(?:.[^s./]+)*[^s]*))#i", "$2", $subject) ;

Ergebnis