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