Schauen wir uns zunächst zwei Sonderzeichen an: „^“ und „$
“
. of despair$“: entspricht der Zeichenfolge, die mit „of despair“ endet;
„^abc$“: entspricht der Zeichenfolge, die mit abc beginnt und mit abc endet, tatsächlich stimmt nur abc damit überein;
„notice“: stimmt mit Zeichenfolgen überein, die „notice;
you
“ enthaltenSie können sehen, dass, wenn Sie die beiden von uns erwähnten Zeichen (letztes Beispiel) nicht verwenden, das Muster (regulärer Ausdruck) an einer beliebigen Stelle in der zu prüfenden Zeichenfolge erscheinen kann und Sie es nicht an den Seiten sperren.
Es gibt auch mehrere Zeichen „*“, „+“ und „?“, die verwendet werden, um die Anzahl oder Reihenfolge des Vorkommens eines Zeichens darzustellen. Sie stellen jeweils „null oder mehr“, „eins oder mehrere“ dar „null oder eins.“ Hier sind einige Beispiele:
„ab*“: Entspricht einer Zeichenfolge,
die aus a und null oder mehr b („a“, „ab“, „abbb“ usw.) besteht
oben, aber mit mindestens einem b („ab“, „abbb“ usw.);
„ab?“: entspricht 0 oder einem b;
„a?b+$“: entspricht einem oder 0 a, gefolgt von Add more than one
Zeichenfolge,
die mit b endet.
Sie können auch die Anzahl der in geschweiften Klammern angezeigten Zeichen begrenzen, z. B.
„ab{2}“: entspricht einem a gefolgt von zwei b (nicht weniger) („abb“);
": mindestens zwei b("abb", "abbbb" usw.);
"ab{3,5}": 2-5 b("abbb", "abbbb" oder "abbbbb").
Sie müssen auch Beachten Sie, dass Sie immer angeben müssen (dh „{0,2}“, nicht „{,2}“). Ebenso müssen Sie beachten, dass „*“, „+“ und „?“ identisch sind Folgende drei Bereichsanmerkungen: „{0,}“, „{1,}“ bzw. „{0,1}“.
Setzen Sie nun eine bestimmte Anzahl von Zeichen in Klammern, zum Beispiel:
„a(bc)*“: entspricht a gefolgt von 0 oder einem „bc“
: eins bis 5 „bc“. "
hat auch ein Zeichen '│', was einer ODER-Verknüpfung entspricht:
"hi│hello": entspricht einer Zeichenfolge, die "hi" oder "hello" enthält;
"(b│cd)ef": entspricht einer Zeichenfolge, die "bef" enthält. Oder die Zeichenfolge „cdef“;
„(a│b)*c“: Entspricht einer Zeichenfolge, die mehrere (einschließlich 0) a oder b enthält, gefolgt von einem Punkt
(‘.’), der alle einzelnen Zeichen darstellen kann:
„a.[0-9]“: ein a gefolgt von einem Zeichen gefolgt von einer Zahl (Strings, die einen solchen String enthalten, werden abgeglichen und diese Klammer wird in Zukunft weggelassen)
„^.{ 3}$“: endet mit drei Zeichen. Der in eckigen Klammern eingeschlossene Inhalt entspricht nur einem einzelnen Zeichen
„a“ oder „b“
: entspricht einem einzelnen Zeichen aus „ a' bis 'd' (gleicher Effekt wie „a│b│c│d“ und „[abcd]“
: Entspricht Zeichen, die mit einem Buchstaben beginnen. Zeichenfolge
„[0-9 ]%“: Entspricht Zeichenfolgen, die x% enthalten
. „[a-zA-Z0-9]$“: Entspricht Zeichenfolgen, die mit einem Komma gefolgt von einer Zahl oder einem Buchstaben enden.
Sie können die nicht gewünschten Zeichen auch in eckige Klammern setzen . Sie müssen lediglich „^“ als Anfang der Klammer verwenden (dh „%[^a-zA-Z]%“ entspricht zwei Prozentzeichen mit einem darin enthaltenen Nicht-Buchstaben-String)
. interpretieren, aber wenn „^.[$()│*+?{“ als Zeichen mit besonderer Bedeutung verwendet wird, müssen Sie „“ vor diesen Zeichen hinzufügen, und in PHP3 sollten Sie die Verwendung von „“ am Anfang vermeiden das Muster. Zum Beispiel sollte der reguläre Ausdruck „($│?[0-9]+“ ereg("( \$│?[0-9 ]+", $str) heißen (ich nicht wissen Sie, ob es in PHP4 dasselbe ist)
Vergessen Sie nicht, dass Zeichen in eckigen Klammern eine Ausnahme von dieser Regel darstellen – innerhalb von eckigen Klammern verlieren alle Sonderzeichen, einschließlich (''), ihre besonderen Eigenschaften (z. B. „[* +?{}.]“ stimmt mit Zeichenfolgen überein, die diese Zeichen enthalten). Außerdem sagt uns das RegX-Handbuch: „Wenn die Liste ‚]‘ enthält, ist es am besten, es als erstes Zeichen in der Liste zu verwenden folgen Sie '^'). Der Vollständigkeit
halber sollte ich auf Sortiersequenzen, Zeichenklassen und Äquivalenzklassen eingehen. Ich möchte jedoch nicht zu sehr ins Detail gehen und muss im Folgenden nicht behandelt werden Weitere Informationen finden Sie in den Regex-Manpages.
So erstellen Sie ein Muster,
um die Eingabe eines Währungsbetrags abzugleichen
Die Eingabeinformationen sind eine Zahl, die Geld darstellt. Wir glauben, dass es vier Möglichkeiten gibt, den Geldbetrag darzustellen: „10.000,00“ und „10.000,00“ oder ohne Dezimalteil „10.000“ und „10.000“. Beginnen wir nun mit der Erstellung dieses Zuordnungsmusters:
^[1-9][ 0 -9]*$
Dies bedeutet, dass alle Variablen mit einer anderen Zahl als 0 beginnen müssen. Dies bedeutet aber auch, dass eine einzelne „0“ den Test nicht bestehen kann. Folgendes ist die Lösung:
^(0│[1-9] [0- 9]*)$
„Nur 0 und Zahlen, die mit 0 beginnen, stimmen überein“, wir können auch ein negatives Vorzeichen vor der Zahl zulassen:
^(0│-?[1-9][0-9]*)$
Dies ist: „0 oder eine Zahl, die mit 0 beginnt und möglicherweise ein negatives Vorzeichen hat.“ Okay, okay, jetzt lasst uns weniger streng sein und erlauben, mit 0 zu beginnen. Jetzt lassen wir das negative Vorzeichen weg, weil wir dort Münzen darstellen Es ist nicht erforderlich, es zu verwenden. Wir geben jetzt das Muster an, das mit dem Dezimalteil übereinstimmt:
^[0-9]+(.[0-9]+)?$
Dies bedeutet, dass die übereinstimmende Zeichenfolge mit mindestens einem Arabischen beginnen muss Ziffer . Beachten Sie jedoch, dass „10.“ im obigen Muster nicht übereinstimmt, sondern nur „10“ und „10.2“ (Wissen Sie warum)
^[0-9]+(.[0-9]{ 2 })?$
Wir haben oben angegeben, dass nach dem Komma zwei Dezimalstellen stehen müssen. Wenn Sie denken, dass dies zu hart ist, können Sie es ändern in:
^[0-9]+(.[0-9]{1
,
2}
)?
,[ 0-9]{3})*(.[0-9]{1,2})?$
Vergessen Sie nicht das Pluszeichen „+“, das bei Bedarf durch das Multiplikationszeichen „*“ ersetzt werden kann Ich möchte die Eingabe leerer Zeichenfolgen zulassen (Warum? Vergessen Sie auch nicht, dass der Backslash „“ Fehler in PHP-Zeichenfolgen verursachen kann (ein sehr häufiger Fehler). Nachdem wir die Zeichenfolge nun bestätigen können, werden wir jetzt alle entfernen Kommas str_replace(" ,", "", $money) Behandeln Sie den Typ dann als double und wir können damit mathematische Berechnungen durchführen.
Erstellen eines regulären Ausdrucks zum Überprüfen von E-Mails
. Lassen Sie uns weiter diskutieren, wie eine E-Mail-Adresse vollständig überprüft wird E-Mail-Adresse Es gibt drei Teile in: POP3-Benutzername (alles links von „@“ ), „@“ , Servername (das ist der verbleibende Teil). Der Benutzername kann Groß- und Kleinbuchstaben, arabische Ziffern und Punkte (') enthalten. '), Minus ('-') und Unterstrich ('_') folgen ebenfalls dieser Regel, mit Ausnahme des Unterstrichs.
Das Gleiche gilt für Server. Es muss mindestens ein Zeichen zwischen aufeinanderfolgenden Punkten geben. Schauen wir uns nun an, wie man ein passendes Muster für den Benutzernamen schreibt:
^[_a-zA-Z0-9-]+$
Die Existenz von Punkten ist Noch nicht erlaubt. Sagen wir:
^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*$
Das Obige bedeutet: „Beginnen Sie mit mindestens einem kanonischen Zeichen.“ (außer . Vorzeichen), gefolgt von 0 oder mehr Zeichenfolgen, die mit einem Punkt beginnen. „
Zur Vereinfachung können wir eregi() anstelle von eregi() verwenden. Bei eregi() wird die Groß- und Kleinschreibung nicht beachtet, sodass wir keine Angaben machen müssen zwei Bereiche „az“ und „AZ“ – Sie müssen nur einen angeben:
^[_a-z0-9-]+(.[_a-z0-9-]+)*$
Der Servername danach ist derselbe , aber der Unterstrich muss entfernt werden:
^[a-z0-9-]+(.[a-z0-9-]+)*$
Fertig. Verwenden Sie nun einfach „@“, um die beiden Teile zu verbinden:
^[_a -z0-9-]+ (.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$
Das ist das Ganze E-Mail-Authentifizierungs-Matching-Modus, nur Aufruf erforderlich
eregi('^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[ a-z0-9-] +)*$ ',$eamil),
um herauszufinden, ob es sich um eine E-Mail handelt.
Andere Verwendungsmöglichkeiten von regulären Ausdrücken
zum Extrahieren von Zeichenfolgen:
ereg() und eregi() verfügen über eine Funktion, die es Benutzern ermöglicht, einen Teil einer Zeichenfolge mithilfe regulärer Ausdrücke zu extrahieren (Informationen zur spezifischen Verwendung finden Sie im Handbuch). eine Zeichenfolge aus Pfad/URL Dateinamen extrahieren – Sie benötigen den folgenden Code:
ereg("([^\/]*)$", $pathOrUrl, $regs);
echo $regs[1];
Erweiterte Ersetzungen
ereg_replace() und eregi_replace() sind ebenfalls sehr nützlich: Wenn wir alle getrennten negativen Vorzeichen durch Kommas ersetzen möchten:
ereg_replace("[ nrt]+" , "," , trim($str));