zur Anleitung
Transcrição
zur Anleitung
Regular Expressions - Reguläre Ausdrücke Reguläre Ausdrücke (Regex) sind eine effiziente Möglichkeit, Teile aus einem String nach einem bestimmten Suchmuster zu filtern. Dazu wird ein Muster (Pattern) definiert: Grundstruktur eines Patterns /Pattern/[modifier] Die „ /“ -Zeichen sind sog. Delimiter, die den Anfang und das Ende des Patterns kennzeichnen. Als Delimiter sind alle nicht alphanumerischen Zeichen ohne dem „ \“ (Backslash) zugelassen. Optional können an eine Pattern noch sog. Modifier angehängt werden. Die folgenden Beispiele können z.B. mit der preg_match() –Funktion von PHP durchgeführt werden. Beispiel Nr. 1 –Finden eines Worts <?php $string = "This is a sample Text"; $pattern = "/sample/"; preg_match($pattern, $string, $result); echo "Ergebnis: ".$result[0]; ?> Ergebnis: sample Modifier Mit Hilfe der Modifier ist es möglich, am Regulären Ausdruck bestimmte Behandlungsweisen einzustellen. Modifier wirken sich hierbei immer auf das gesamte Pattern aus. i Schaltet die Unterscheidung zwischen Groß- und Kleinschreibung aus. s Der zu behandelnde String wird Zeilenweise behandelt m Der zu behandelnde String wird im Ganzen behandelt (Gegenteil zu s) Peter Kaske –14.11.2006 1 von 4 Metacharaktere Da man oft nicht nach einer festgelegten Zeichenfolge sucht, kann man mit Hilfe der Metacharaktere beliebige zu suchende Zeichen und Teile darstellen. Dies gibt den Regex eine große Flexibilität. . Der Punkt steht für jedes beliebiges Zeichen, außer dem Zeilenumbruch ^ Der Zirkumflex bezeichnet den Beginn eines Strings $ Das Dollarzeichen steht für das Ende eines Strings | Mit Hilfe des Pipe-Zeichens können Alternativen definiert werden (vergl. OR-Operand) () Die runden Klammern dienen zur Klammerungen einzelner regex-Blöcke. Sie können beliebig geschachtelt werden [] Mit Hilfe der eckigen Klammer werden Zeichenklassen definiert Soll ein Metacharakter als normales Zeichen behandelt werden, muss es mit „ \“„ escaped“ werden. (siehe Beispiel 6) Beispiel 2 –Finden zweier beliebiger Zeichen mit Hilfe des „.“-Charakters $string = "abc"; $pattern = "/../" Ergebnis: ab Beispiel 3 –Überprüfen ob der String mit einem „a“beginnt und einem „c“endet. $string = "abc"; $pattern = "/^a.c$/" Ergebnis: abc Beispiel 4 –Überprüfen ob der String ein„ab“oder ein „bc“beinhaltet. $string = "abc"; $pattern = "/ab|bc/" Ergebnis: ab $string = "bca"; $pattern = "/ab|bc/" Ergebnis: bc Peter Kaske –14.11.2006 2 von 4 Beispiel 5 –Überprüfen ob der String eine Zahl zwischen 1 und 9 beinhaltet. $string = "a0b1c"; $pattern = "/[1-9]/" Ergebnis: 1 (berücksichtigt nicht die 0, da diese nicht in der Zeichenklasse enthalten ist) $string = "bcya"; $pattern = "/[c-z]/" Ergebnis: c (obwohl das „ y“in der Zeichenklasse enthalten ist, wird es nicht gefunden, da der obige Pattern nur nach einem Zeichen sucht) Es kann auch nach Großbuchstaben gesucht werden. Dazu verwendet man einfach eine Zeichenklasse wie „ [A-Z]“ . Man kann auch kombinieren, „ [a-zA-Z]“ , oder verwendet den Modifikator „ i“um die Beachtung der Groß- / Kleinschreibung zu deaktivieren. Beispiel 6 –Suche nach speziellen Zeichen wie „()„oder „$“(„ escapen“) $string = "Man(n) hat´s nicht immer leicht!"; $pattern = "/\(n\)/" Ergebnis: (n) $string = "Man(n) hat´s nicht immer leicht!"; $pattern = "/(n)/" Ergebnis: n Hinweis zu runden Klammern Wie schon erwähnt, können runde Klammern beliebig geschachtelt werden. Zudem ist eine Verwendung ähnlich dem Distributivgesetz möglich. (a(b|c)) --> Sucht nach „ ab“und nach „ ac“ (a|b)(c|d) --> Sucht nach „ ac“ ,„ ad“ ,„ bc“und „ bd“ Peter Kaske –14.11.2006 3 von 4 Quantifier Die oben gezeigten Beispiele sind in der zu suchenden Zeichenanzahl sehr eingeschränkt. So findes das Pattern „ /./“nur ein Zeichen, da der Punkt für genau ein Zeichen steht. Und auch die Zeichenklasse [A-Z] steht nur für genau einen Großbuchstaben im String. Mit Hilfe der Quantifier ist eine flexible Angabe über die Anzahl der zu suchenden Zeichen möglich. * Das Sternchen oder Wildcart steht für 0 oder mehr Zeichen + Das Plus steht für 1 oder mehr Zeichen ? Das Fragezeichen steht für 0 oder exakt 1 Zeichen {n} Steht für genau n Zeichen {n,} Steht für mindestens n oder mehr Zeichen {n,m} Steht für mindestens n und maximal m Zeichen Quantifier werden hinter das zu quantifizierende Zeichen oder Zeichenblock geschrieben. Beispiel 7 –Überprüfen ob in einem Textfeld nur Zahlen enthalten sind Im Zusammenhang mit PHP werden oft Formulare verwendet. Nun kann es sein, das in ein Textfeld keine anderen Zeichen als Buchstaben erlaubt sein sollen. Da HTML hierfür kein Attribut zur Verfügung stellt, und der übergebene Wert in PHP einen String darstellt, womit die Verwendung der PHP-Funktion is_int() nicht möglich ist, kann man sich mit Regex behelfen. <?php //Wert der durch das Textfeld übergeben wird ist in der Variable $_POST['textfeldWert'] = „ foo 1234 bar“gespeichert $pattern = "/^([0-9])+$/" if (preg_match($pattern, $_POST['textfeldWert']) != 0) { //weiter verarbeiten } else { //ansonsten abbrechen } ?> Hier würde die Verarbeitung abbrechen, da der übergebene Wert nicht nur Ziffern enthält. Dieser Regex sorgt sogar dafür, dass die Verarbeitung abbricht, wenn $_POST['textfeldWert'] einen leeren String oder nur ein Leerzeichen enthält. Allerdings sind auch keine Zahlen mit Komma möglich. Peter Kaske –14.11.2006 4 von 4