Erarbeiten der regelmäßigen Ausdrücke in PHP
| by Dennis Pallett | March 28, 2005
Was sind regelmäßige Ausdrücke?
Ein regelmäßiger Ausdruck ist ein Muster, das verschiedene Textfolgen zusammenbringen kann. Mit regelmäßigen Ausdrücken kannst du (und ersetzen) bestimmte Textmuster finden, z.B. „alle Wörter, die mit dem Buchstaben A“ oder „anfangen, nur Telefonnummern finden“. Regelmäßige Ausdrücke sind in den Gültigkeitserklärungkategorien häufig benutzt, weil sie ein wirklich leistungsfähiges Werkzeug sind, zum von E-mail Adressen zu überprüfen, Telefonnummern, Straße Adressen, Reißverschlußcodes und mehr.
In diesem Tutorial zeige ich dich, wie regelmäßige Ausdrücke in PHP arbeiten, und gebe dir eine kurze Einleitung auf dem Schreiben deiner eigenen regelmäßigen Ausdrücke. Ich gebe dir einigem Beispiel auch regelmäßige Ausdrücke, die häufig benutzt sind.
Regelmäßige Ausdrücke in PHP
Regex (regelmäßige Ausdrücke) zu verwenden ist in PHP wirklich einfach und dort ist einige Funktionen, die bestehen, um das findene und ersetzende regex zu tun. Lassen Sie uns mit einer einfachen regex Entdeckung beginnen.
Einen Blick an den Unterlagen der preg_match Funktion haben (http://php.net/preg_match). Wie du von den Unterlagen sehen kannst, wird preg_match benutzt, um einen regelmäßigen Ausdruck durchzuführen. In diesem Fall ist kein Ersetzen, nur eine einfache Entdeckung erfolgt. Copy der Code unten, zum ihm eines try.< zu geben? php//Beispiel string$str = „lassen Sie uns das Material finden < bla > zwischen </bla> diese zwei vorhergehenden Haltewinkel“; /durchführen lassen Sie uns regex$do = preg_match (“/<bla> (. *) < /bla>/„, $str, $matches); /brachte überprüfung, wenn regex successfulif war ($do = zutreffend) {//, etwas, zeigen die zusammengebrachten Zeichenketteecho htmlentities zusammen ($matches [„0“]); // auch, wie der Text zwischen den Umbauten „<br/>“ widerhallen. $matches [„1“];} sonst {// kein Gleichecho „könnte nicht ein Gleiches finden“;}? >
, den Code, ist es nachher laufen lassend vermutlich eine gute Idee, wenn ich einen schnellen Durchlauf durch den Code tue. Im Allgemeinen ist der vollständige Kern des oben genannten Codes die Linie, die das preg_match enthält. Das erste Argument ist dein regex Muster. Dieses ist vermutlich das wichtigste. Später in diesen Tutorial erkläre ich einige grundlegende regelmäßige Ausdrücke, aber, wenn du wirklich regelmäßigen Ausdruck erlernen möchtest dann, ist er am besten, wenn du auf Google nach spezifischen regelmäßigen Ausdruck Beispielen schaust.
Das zweite Argument ist die vorbehaltliche Zeichenkette. Ich nehme an, der kein Erklären benötigt. Schließlich kann das dritte Argument wahlweise freigestellt sein, aber, wenn du den zusammengebrachten Text erhalten möchtest, oder der Text zwischen etwas, es ist eine gute Idee, sie zu verwenden (gerade wie ich sie im Beispiel verwendete).
Die preg_match Funktion stoppt, nachdem sie das erste Gleiche gefunden hat. Wenn du ALLE Gleichen in einer Zeichenkette finden möchtest, mußt du die preg_match_all Funktion verwenden (http://www.php.net/preg_match_all). Dieses bearbeitet recht das viele selbe, so dort ist keine Notwendigkeit, sie separat zu erklären.
Nun da wir das Finden gehabt haben, lassen Sie uns Finden-undersetzen, mit der preg_replace Funktion tun (http://www.php.net/preg_replace). Die preg_replace Funktion bearbeitet recht ähnliches zur preg_match Funktion, aber anstatt gibt es ein anderes Argument für die Wiedereinbauzeichenkette. Copy der Code unten und laufen gelassenes it.<? php//Beispiel string$str = „lassen Sie uns das <bla>stuff between</bla> ersetzen, welches das bla einklammert“; /das preg tun replace$result = preg_replace (“/<bla> (. *) < /bla>/„, „<bla>new stuff</bla>“, $str); Echo htmlentities ($result);? >
Das Resultat würde dann die gleiche Zeichenkette sein, ausgenommen es jetzt „neues Material“ zwischen den bla Umbauten sagen würde. Dieses ist selbstverständlich gerade ein einfaches Beispiel, und vorgerücktere Wiedereinbaue können erfolgt werden.
Du kannst Schlüssel in der Wiedereinbauzeichenkette auch verwenden. Sagen, daß du noch den Text zwischen den Haltewinkeln wünschst und gerade etwas addierst? Du verwendest die $1, die $2, usw. Schlüssel für die. Z.B.: <? php//Beispiel string$str = „lassen Sie uns das <bla>stuff between</bla> ersetzen, welches das bla einklammert“; /das preg tun replace$result = preg_replace (“/<bla> (. *) < /bla>/„, „<bla>new Material (das alte: $1) </bla>“, $str); Echo htmlentities ($result);? >
Dieses würde dann „lassen Sie uns das neue Material ersetzen drucken (das alte: Material, zwischen), welches das bla“ einklammert. $2 ist für die Sekunde „verfangen-alle“, $3 für den Third, etc.
Das ist über es für regelmäßige Ausdrücke. Es scheint sehr schwierig, aber, sobald du greifst, ist es extrem einfach dennoch eins der leistungsfähigsten Werkzeuge bei der Programmierung in PHP. Ich kann nicht die Zahl Zeiten zählen, die regex mich von den Stunden der schwierigen Textfunktionen der Kodierung gespeichert hat.
Ein Beispiel
Was würde ein guter Tutorial ohne einige reale Beispiele sein? Lassen Sie uns einen Blick an einer einfachen E-mail Gültigkeitserklärungfunktion zuerst haben. Eine E-mail Adresse muß mit Buchstaben beginnen, oder Zahlen, haben dann @, dann ein Gebiet und beenden mit einer Verlängerung. Das regex für das würde etwas ähnliches sein: ^ [a-zA-Z0-9_ . -] +@ [a-zA-Z0-9 -] + . [a-zA-Z0-9 - .]+$
Mich dieses regex erklären schnell lassen. Im Allgemeinen sagt das erste Teil, daß alle es Buchstaben oder Zahlen sein muß. Dann erhalten wir @, und nachher sollte die dort Buchstaben und/oder Zahlen wieder sein (das Gebiet). Schließlich überprüfen wir während einer Periode und dann auf eine Verlängerung. Der Code, zum dieses regex zu benutzen sieht wie dieses aus: <? php//gut e-mail$good = „john@example.com“; /schlecht e-mail$bad = „blabla@blabla“; /lassen Sie uns das gute e-mailif (preg_match (“/^ [a-zA-Z0-9_ überprüfen . -] +@ [a-zA-Z0-9 -] + . [a-zA-Z0-9 - .]+$/„, $good)) {Echo „gültige E-mail“;} sonst {Echo „unzulässige E-mail“;}Echo „<br/>“; /und das schlechte e-mailif (preg_match (“/^ [a-zA-Z0-9_ überprüfen . -] +@ [a-zA-Z0-9 -] + . [a-zA-Z0-9 - .]+$/„, $bad)) {Echo „gültige E-mail“;} sonst {Echo „unzulässige E-mail“;}? >
Das Resultat dieses würde „gültige E-mail sein. Unzulässige E-mail“, selbstverständlich. Wir haben gerade überprüft, ob eine E-mail Adresse gültig ist. Wenn du den oben genannten Code in einer Funktion aufwickelst, hast dich du eine E-mail Gültigkeitserklärungfunktion. Im Verstand zwar halten, daß das regex nicht vollkommen ist: schließlich überprüft es nicht, ob die Verlängerung zu lang ist, es? Weil ich diesen Tutorkurzschluß halten möchte, gebe ich nicht das flügge regex, aber du kannst es über Google leicht finden.
Ein anderes Beispiel
Ein anderes großes Beispiel würde eine Telefonnummer sein. Sagen, das du überprüfen möchtest, daß Telefonnummern und sicherzustellen sie im korrekten Format waren. Lassen Sie uns annehmen, daß du die Zahlen im Format von xxx-xxxxxxx sein wünschst. Der Code würde etwas ähnliches schauen: <? php//gut number$good = „123-4567890“; /schlecht number$bad = „45-3423423“; /lassen Sie uns überprüfen gut numberif (preg_match (“/ d {3} - d {7}/„, $good)) {Echo „gültige Zahl“;} sonst {Echo „unzulässige Zahl“;}Echo „<br/>“; /und überprüfen schlecht numberif (preg_match (“/ d {3} - d {7}/„, $bad)) {Echo „gültige Zahl“;} sonst {Echo „unzulässige Zahl“;}? >
Das regex ist ziemlich einfach, weil wir verwenden D. Dieses bedeutet im Allgemeinen „Gleiches jede mögliche Stelle“ mit der Länge hinter ihm. In diesem Beispiel sucht es zuerst nach 3 Stellen, dann „-“ (Bindestrich) und schließlich 7 Stellen. Arbeitet tadellos und tut genau, was wir wünschen.
Was ist genau mit regelmäßigen Ausdrücken möglich?
Regelmäßige Ausdrücke sind wirklich eine von den leistungsfähigsten Werkzeugen in PHP oder jede mögliche andere Sprache für diese Angelegenheit (du kannst sie in deinen mod_rewrite Richtlinien außerdem benutzen!). Es gibt soviel dich kann mit regex tun, und wir haben nur die Oberfläche in diesem Tutorial mit einigen sehr grundlegenden Beispielen verkratzt.
Wenn du wirklich in regex mich graben möchtest, dich vorschlagen Suche auf Google für mehr Tutorials und Versuch, um die regex Syntax zu erlernen. Es ist nicht einfach und es gibt durchaus eine steile erlernenkurve (meiner Meinung nach), aber die beste Weise zu erlernen ist, eine Menge Beispiele durchzulaufen und versucht, sie auf normales Englisch zu übersetzen. Sie wirklich Hilfen du erlernt die Syntax.
Zukünftig weihe ich einen kompletten Artikel ausschließlich Beispielen, einschließlich die vorgerücktere, ohne irgendeine Erklärung ein. Aber für jetzt, kann ich dir Verbindungen zu anderen Tutorials nur geben:
Der 30 minuziöse Regex Tutorial (http://www.codeproject.com/dotnet/RegexTutorial.asp)
Regular-Expressions.info (http://www.regular-expressions.info/)
Ein regelmäßiger Ausdruck ist ein Muster, das verschiedene Textfolgen zusammenbringen kann. Mit regelmäßigen Ausdrücken kannst du (und ersetzen) bestimmte Textmuster finden, z.B. „alle Wörter, die mit dem Buchstaben A“ oder „anfangen, nur Telefonnummern finden“. Regelmäßige Ausdrücke sind in den Gültigkeitserklärungkategorien häufig benutzt, weil sie ein wirklich leistungsfähiges Werkzeug sind, zum von E-mail Adressen zu überprüfen, Telefonnummern, Straße Adressen, Reißverschlußcodes und mehr.
In diesem Tutorial zeige ich dich, wie regelmäßige Ausdrücke in PHP arbeiten, und gebe dir eine kurze Einleitung auf dem Schreiben deiner eigenen regelmäßigen Ausdrücke. Ich gebe dir einigem Beispiel auch regelmäßige Ausdrücke, die häufig benutzt sind.
Regelmäßige Ausdrücke in PHP
Regex (regelmäßige Ausdrücke) zu verwenden ist in PHP wirklich einfach und dort ist einige Funktionen, die bestehen, um das findene und ersetzende regex zu tun. Lassen Sie uns mit einer einfachen regex Entdeckung beginnen.
Einen Blick an den Unterlagen der preg_match Funktion haben (http://php.net/preg_match). Wie du von den Unterlagen sehen kannst, wird preg_match benutzt, um einen regelmäßigen Ausdruck durchzuführen. In diesem Fall ist kein Ersetzen, nur eine einfache Entdeckung erfolgt. Copy der Code unten, zum ihm eines try.< zu geben? php//Beispiel string$str = „lassen Sie uns das Material finden < bla > zwischen </bla> diese zwei vorhergehenden Haltewinkel“; /durchführen lassen Sie uns regex$do = preg_match (“/<bla> (. *) < /bla>/„, $str, $matches); /brachte überprüfung, wenn regex successfulif war ($do = zutreffend) {//, etwas, zeigen die zusammengebrachten Zeichenketteecho htmlentities zusammen ($matches [„0“]); // auch, wie der Text zwischen den Umbauten „<br/>“ widerhallen. $matches [„1“];} sonst {// kein Gleichecho „könnte nicht ein Gleiches finden“;}? >
, den Code, ist es nachher laufen lassend vermutlich eine gute Idee, wenn ich einen schnellen Durchlauf durch den Code tue. Im Allgemeinen ist der vollständige Kern des oben genannten Codes die Linie, die das preg_match enthält. Das erste Argument ist dein regex Muster. Dieses ist vermutlich das wichtigste. Später in diesen Tutorial erkläre ich einige grundlegende regelmäßige Ausdrücke, aber, wenn du wirklich regelmäßigen Ausdruck erlernen möchtest dann, ist er am besten, wenn du auf Google nach spezifischen regelmäßigen Ausdruck Beispielen schaust.
Das zweite Argument ist die vorbehaltliche Zeichenkette. Ich nehme an, der kein Erklären benötigt. Schließlich kann das dritte Argument wahlweise freigestellt sein, aber, wenn du den zusammengebrachten Text erhalten möchtest, oder der Text zwischen etwas, es ist eine gute Idee, sie zu verwenden (gerade wie ich sie im Beispiel verwendete).
Die preg_match Funktion stoppt, nachdem sie das erste Gleiche gefunden hat. Wenn du ALLE Gleichen in einer Zeichenkette finden möchtest, mußt du die preg_match_all Funktion verwenden (http://www.php.net/preg_match_all). Dieses bearbeitet recht das viele selbe, so dort ist keine Notwendigkeit, sie separat zu erklären.
Nun da wir das Finden gehabt haben, lassen Sie uns Finden-undersetzen, mit der preg_replace Funktion tun (http://www.php.net/preg_replace). Die preg_replace Funktion bearbeitet recht ähnliches zur preg_match Funktion, aber anstatt gibt es ein anderes Argument für die Wiedereinbauzeichenkette. Copy der Code unten und laufen gelassenes it.<? php//Beispiel string$str = „lassen Sie uns das <bla>stuff between</bla> ersetzen, welches das bla einklammert“; /das preg tun replace$result = preg_replace (“/<bla> (. *) < /bla>/„, „<bla>new stuff</bla>“, $str); Echo htmlentities ($result);? >
Das Resultat würde dann die gleiche Zeichenkette sein, ausgenommen es jetzt „neues Material“ zwischen den bla Umbauten sagen würde. Dieses ist selbstverständlich gerade ein einfaches Beispiel, und vorgerücktere Wiedereinbaue können erfolgt werden.
Du kannst Schlüssel in der Wiedereinbauzeichenkette auch verwenden. Sagen, daß du noch den Text zwischen den Haltewinkeln wünschst und gerade etwas addierst? Du verwendest die $1, die $2, usw. Schlüssel für die. Z.B.: <? php//Beispiel string$str = „lassen Sie uns das <bla>stuff between</bla> ersetzen, welches das bla einklammert“; /das preg tun replace$result = preg_replace (“/<bla> (. *) < /bla>/„, „<bla>new Material (das alte: $1) </bla>“, $str); Echo htmlentities ($result);? >
Dieses würde dann „lassen Sie uns das neue Material ersetzen drucken (das alte: Material, zwischen), welches das bla“ einklammert. $2 ist für die Sekunde „verfangen-alle“, $3 für den Third, etc.
Das ist über es für regelmäßige Ausdrücke. Es scheint sehr schwierig, aber, sobald du greifst, ist es extrem einfach dennoch eins der leistungsfähigsten Werkzeuge bei der Programmierung in PHP. Ich kann nicht die Zahl Zeiten zählen, die regex mich von den Stunden der schwierigen Textfunktionen der Kodierung gespeichert hat.
Ein Beispiel
Was würde ein guter Tutorial ohne einige reale Beispiele sein? Lassen Sie uns einen Blick an einer einfachen E-mail Gültigkeitserklärungfunktion zuerst haben. Eine E-mail Adresse muß mit Buchstaben beginnen, oder Zahlen, haben dann @, dann ein Gebiet und beenden mit einer Verlängerung. Das regex für das würde etwas ähnliches sein: ^ [a-zA-Z0-9_ . -] +@ [a-zA-Z0-9 -] + . [a-zA-Z0-9 - .]+$
Mich dieses regex erklären schnell lassen. Im Allgemeinen sagt das erste Teil, daß alle es Buchstaben oder Zahlen sein muß. Dann erhalten wir @, und nachher sollte die dort Buchstaben und/oder Zahlen wieder sein (das Gebiet). Schließlich überprüfen wir während einer Periode und dann auf eine Verlängerung. Der Code, zum dieses regex zu benutzen sieht wie dieses aus: <? php//gut e-mail$good = „john@example.com“; /schlecht e-mail$bad = „blabla@blabla“; /lassen Sie uns das gute e-mailif (preg_match (“/^ [a-zA-Z0-9_ überprüfen . -] +@ [a-zA-Z0-9 -] + . [a-zA-Z0-9 - .]+$/„, $good)) {Echo „gültige E-mail“;} sonst {Echo „unzulässige E-mail“;}Echo „<br/>“; /und das schlechte e-mailif (preg_match (“/^ [a-zA-Z0-9_ überprüfen . -] +@ [a-zA-Z0-9 -] + . [a-zA-Z0-9 - .]+$/„, $bad)) {Echo „gültige E-mail“;} sonst {Echo „unzulässige E-mail“;}? >
Das Resultat dieses würde „gültige E-mail sein. Unzulässige E-mail“, selbstverständlich. Wir haben gerade überprüft, ob eine E-mail Adresse gültig ist. Wenn du den oben genannten Code in einer Funktion aufwickelst, hast dich du eine E-mail Gültigkeitserklärungfunktion. Im Verstand zwar halten, daß das regex nicht vollkommen ist: schließlich überprüft es nicht, ob die Verlängerung zu lang ist, es? Weil ich diesen Tutorkurzschluß halten möchte, gebe ich nicht das flügge regex, aber du kannst es über Google leicht finden.
Ein anderes Beispiel
Ein anderes großes Beispiel würde eine Telefonnummer sein. Sagen, das du überprüfen möchtest, daß Telefonnummern und sicherzustellen sie im korrekten Format waren. Lassen Sie uns annehmen, daß du die Zahlen im Format von xxx-xxxxxxx sein wünschst. Der Code würde etwas ähnliches schauen: <? php//gut number$good = „123-4567890“; /schlecht number$bad = „45-3423423“; /lassen Sie uns überprüfen gut numberif (preg_match (“/ d {3} - d {7}/„, $good)) {Echo „gültige Zahl“;} sonst {Echo „unzulässige Zahl“;}Echo „<br/>“; /und überprüfen schlecht numberif (preg_match (“/ d {3} - d {7}/„, $bad)) {Echo „gültige Zahl“;} sonst {Echo „unzulässige Zahl“;}? >
Das regex ist ziemlich einfach, weil wir verwenden D. Dieses bedeutet im Allgemeinen „Gleiches jede mögliche Stelle“ mit der Länge hinter ihm. In diesem Beispiel sucht es zuerst nach 3 Stellen, dann „-“ (Bindestrich) und schließlich 7 Stellen. Arbeitet tadellos und tut genau, was wir wünschen.
Was ist genau mit regelmäßigen Ausdrücken möglich?
Regelmäßige Ausdrücke sind wirklich eine von den leistungsfähigsten Werkzeugen in PHP oder jede mögliche andere Sprache für diese Angelegenheit (du kannst sie in deinen mod_rewrite Richtlinien außerdem benutzen!). Es gibt soviel dich kann mit regex tun, und wir haben nur die Oberfläche in diesem Tutorial mit einigen sehr grundlegenden Beispielen verkratzt.
Wenn du wirklich in regex mich graben möchtest, dich vorschlagen Suche auf Google für mehr Tutorials und Versuch, um die regex Syntax zu erlernen. Es ist nicht einfach und es gibt durchaus eine steile erlernenkurve (meiner Meinung nach), aber die beste Weise zu erlernen ist, eine Menge Beispiele durchzulaufen und versucht, sie auf normales Englisch zu übersetzen. Sie wirklich Hilfen du erlernt die Syntax.
Zukünftig weihe ich einen kompletten Artikel ausschließlich Beispielen, einschließlich die vorgerücktere, ohne irgendeine Erklärung ein. Aber für jetzt, kann ich dir Verbindungen zu anderen Tutorials nur geben:
Der 30 minuziöse Regex Tutorial (http://www.codeproject.com/dotnet/RegexTutorial.asp)
Regular-Expressions.info (http://www.regular-expressions.info/)
Article Source: http://www.articleset.com

You are welcome to publish or reprint this article free of charge, provided:
- you include the entire article, unchanged, including the "About The Author" box
- all hyperlinks remain active, including the bottom ArticleSet.com link (does not apply to print publications)
- you agree not to hold the authors nor ArticleSet.com liable for any loss profits, expenses, or any other damages resulting from the use or misuse of articles published on this website