PHP – Reguläre Ausdrücke
Transcrição
PHP – Reguläre Ausdrücke
PHP – Reguläre Ausdrücke Christian Gürtler 19. März 2012 Inhaltsverzeichnis Inhaltsverzeichnis 1 Einleitung 1 2 Erkennung von Mustern 1 2.1 2.2 2.3 2.4 2.5 2.6 Wichtige Zeichen . . . . Zeichenklassen . . . . . Backslash . . . . . . . . . eingebaute Funktionen . Schreibweise . . . . . . . lookahead / lookbehind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Einleitung Einleitung • Eingaben in Webseiten sollten auf ihre Korrektheit geprüft werden. • Namen: nur Buchstaben • Kreditkartennummern • email-Adressen 2 Erkennung von Mustern 2.1 Wichtige Zeichen Wichtige Zeichen ˆ $ . [. . . ] | (. . . ) ? ∗ + {x,y} [ˆ Zeichenfolge ] Anfang eines Strings Ende eines Strings beliebiges Zeichen Gruppe von Zeichen Alternative (oder) Untermuster 0 oder 1 Zeichen, Muster . . . 0 oder beliebig viele Zeichen, Muster, . . . 1 oder beliebig viele Zeichen, Muster, . . . Quantifizierer (mind. x, aber max. y) negiert Zeichenfolge 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 2 2 2 3 2.2 Zeichenklassen häufig verwendete Zeichenklassen [[:alnum:]] [[:alpha:]] [[:lower:]] [[:upper:]] [[:digit:]] alphanumerische Zeichen alphabetische Zeichen Kleinbuchstaben Großbuchstaben Dezimalziffern 2.3 Backslash Bedeutung des Backslash \n \t \. \d \D \w \W Neue Zeile Tabulator ein Punkt eine beliebige Ziffer (0 − 9) alles außer Ziffern ein Wort (Buchstabe, Ziffer, Unterstrich) jedes Nicht-Wort-Zeichen 2.4 eingebaute Funktionen eingebaute Funktionen • preg_match sucht nach Muster • preg_replace ersetzt Muster 2.5 Schreibweise Schreibweise • preg_match("/muster/", string) • preg_replace("/muster/", ersatz, string) • das Muster wird meist von zwei «/ »eingeschlossen Beispiele • preg_match("/^.{1,6}$/", $_POST["pass"]) der String darf vom Anfang bis zum Ende aus mind. 1, max. aber 6 beliebigen Zeichen bestehen • preg_match("/^[a-zA-Z\pL]+$/", $_POST["user"]) der String darf vom Anfang bis zum Ende nur aus Groß- und Kleinbuchstaben bestehen (inkl. Umlaute und scharfes «s») • preg_replace('/,/','.',$eins) es werden im String Beistriche durch einen «.»ersetzt. 2 Beispiel Listing 1: Beispiel preg_replace 1 2 3 4 5 6 7 8 9 <?php $datum = '2009−1−10'; $suchmuster = '/(\d{4})−(\d{1,2})−(\d{1,2})/'; $ersetzen = ' \3.\2.\1' ; echo "neu: " ; echo preg_replace($suchmuster, $ersetzen, $datum); echo "\n"; echo " alt : $datum"; ?> 2.6 lookahead / lookbehind Listing 2: lookahead/lookbehind 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <?PHP /* pos. lookahead: a1(?= b1) b1 muss auf a1 folgen neg. lookahead: a1(?! b1) b1 darf nicht auf a1 folgen * pos. lookbehind: (?<= b1)a1 b1 muss a1 vorausgehen * neg. lookbehind: (?<! b1)a1 b1 darf a1 nicht vorausgehen * / * echo "\n"; echo "positives lookahead (alle du vor einem ,)\n"; /* , muss auf du folgen*/ echo "−−−−−−−−−−−−−−−−−−−\n"; $string = "ene mene muh und raus bist du, raus bist du noch lange nicht"; echo "$string \n"; $muster = "/du(?=,)/";//alle du vor einem beistrich werden ersetzt $ersatz = "DU"; $string = preg_replace($muster, $ersatz, $string ); echo $string ;echo "\n"; echo "\n"; echo "\n"; 18 19 20 21 22 23 24 25 26 27 28 echo "positives lookbehind (wenn ba nach r, dann ba durch BA ersetzen)\n"; echo "−−−−−−−−−−−−−−−−−−−−\n"; $song = "ba ba ba ba barbara ann"; echo "$song\n"; $muster = "/(?<=r)ba/";//wenn r vor einem ba, dann ba durch BA ersetzen $ersatz = "BA"; $song = preg_replace($muster, $ersatz, $song); echo $song;echo "\n"; echo "\n"; echo "\n"; 29 30 31 32 33 34 35 36 37 38 39 echo "negatives lookahead (alle ba, die nicht vor einem r stehen ersetzen)\n"; echo "−−−−−−−−−−−−−−−−−−−\n"; $song = "ba ba ba ba barbara ann"; echo "$song\n"; $muster = "/ba(?!r)/";//alle ba, die nicht vor einem r stehen ersetzen $ersatz = "BA"; $song = preg_replace($muster, $ersatz, $song); echo $song;echo "\n"; echo "\n"; echo "\n"; 40 41 42 echo "negatives lookbehind (alle ba vor denen kein r steht ersetzen)\n"; echo "−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−\n"; 3 43 44 45 46 47 48 49 $song = "ba ba ba ba barbara ann"; echo "$song\n"; $muster = "/(?<!r)ba/";//alle ba vor denen kein r steht werden ersetzt $ersatz = "BA"; $song = preg_replace($muster, $ersatz, $song); echo $song;echo "\n\n"; ?> 4