Reguläre
Ausdrücke mit Beispielen |
Sonderzeichen in HTML |
Bis vor einiger Zeit wußte ich nur das es soetwas wie "Reguläre Ausdrücke" gibt und durch die Benutzung einiger Ausdrücke für diese und andere Seiten habe ich mich damit beschäftigt. Aber erst beim Erstellen diese Dokumentes habe ich begonnen das Ganze besser zu verstehen.
In PHP3/4 können diese Funktionen Reguläre Ausdrücke verarbeiten:
ereg, ereg_replace, ergei, ergei_replace, split
Anhand von ereg werde ich hier Besipiele / Funktionsweisen zeigen:
ereg("Suchmuster/Optionen",$Wert)
$Wert ist die Variable die Durchsucht werden soll. "Suchmuster/Optionen"
sind die Ausdrücke bzw. Suchmuster die nachfolgend beschrieben werden.
Beschreibung | Bsp. Nr. |
|
---|---|---|
^ | Kennzeichnet den Beginn der Zeichenkette/-folge, innerhalb von [ ] eine Auswahlnegation | 1,5,6 |
$ | ... das Ende der Zeichenkette/-folge | 2,6,12 |
* | Kein oder beliebig viel Zeichen, der klassische Platzhalter | 3 |
+ | Ein oder mehr Zeichen | 3 |
? | Kein oder genau ein Zeichen - Joker, bzw. einklassischer Platzhalter (oder einfacher: Das Zeichen kann, muß aber nicht auftauchen) | 3 |
* + ? | bei alphanumerischen Zeichen bezeichnen diese Zeichen Wiederholungen | 3 |
{ } | Wiederholungen von Zeichen in gschweiften Klammern | 5,6 |
{x,y} | Wiederholungen von Zeichen: x untere Grenze (mindestens), y obere Grenze (maximal) | 5 |
( ) | Runde Klammern kennzeichnen ein Zeichengruppe - auf die dann die Operationen angewendet werden | 5 |
| | Der Oder - Operator | 4,11 |
. | (Punkt) steht für genau ein beliebiges Zeichen | 6 |
[ ] | Eine Auswahl von Zeichen von denen eins an einer bestimmten Stelle vorkommen soll, diese werden mit eckigen Klammern eingeschlossen | 4,8,9,12 |
\ | Backslash - Einleitung eines Sonderzeichnes. Innerhalb der [ ] hat dies keine Beutung ! | 7 |
Sonderzeichen die mit Backslash eingeleitet werden müssen: ^ $ . [ ] ( ) { } ? * + \ | 7,11 |
|
- | Das Minuszeichen, markiert einen Bereich von Zeichen die alle nicht aufgelistet zu werden brauchen, allerdings nur wenn es innerhalb einer eckigen Klammer und dort nicht am Rand steht ! | 4,8-10 |
Beispiele:
1. "^Text" findet "Texterkennung", "Textfluß",
"Textur" - erkennt nicht "Seitentext"
2. "text$" findet "Seitentext", "Ersatztext" -
erkennt nicht "Textfluß"
3. "45*" findet "4", "45", "455", "4555555"
usw. - also beliebig viel fünfen hinter der vier. "45+" findet
"45"," 455" etc. - verlangt immer eine "45" am
Anfang. "45?" findet "4" und "45" - keine oder
eine fünf.
4. "[a-z]|[A-Z]" - Kleinbuschstaben oder Großbuchstaben sollen
nur enthalten sein.
5 . "^23(45){1,2}" sucht von Anfang und findet "2345" und
"234545". "^23(45)*" findet "23", "2345",
"234545" ... usw.
6 . "^.{12}$" sucht genau zwölf beliebige Zeichen.
7 . "\\" Bezeichnet \ - "\." meint den Punkt. "[?\+|]"
ergibt eine Übereinstimmung wenn ? \ + | - Zeichen auftauchen.
8 . "[0-9]{1,2}%" - ein oder zweistellige Zahl gefolgt von einem Prozentzeichen
9. "[0-9]{2},[0-9]" - eine zweistellige Zahl vor dem Komma, danach
beliebige Anzahl an Zahlen.
10. "[0-9]{1,2}\.[0-9]{2}\.[0-9]{4}" Datumsformat vorgenen: Tagund
Monat ein oder zweistellig, das Jahr muß vierstellig sein.
11. "^(Dr|Prof)\." - sucht nach "Dr." oder "Prof."
vom Anfang der Zeichenkette.
12. ",[0-9]{1,2}$" - erlaubt ein / zeistellige Zahlen nach dem Komma,
gesucht vom Ende des übergebenen Wertes / Zeichenkette
Eine Hilfe beim Erstellen von Regeln:
Zuerst einige Werte notieren, die vorkommen dürfen. GGf. gesondert notieren
was nicht vorkommen darf. Die Übersicht behält man dadurch, manchmal
stellt man fest das man das eigendlich ganz anders will.
Gelesen wird das Ganze von links nach rechts, Operatoren folgen dem letzten
Zeichen oder Gruppierung. Dabei muß man beachten das runde Klammern eine
Gruppe bilden, eckige Klammern aber stärker binden als die Runden. Stern,
Pluszeichen und Fragezeichen binden das letzte Zeichen oder Gruppierung, d.h.
abc* bedeutet ab(c*) und nicht (abc)* ! Die Ausnahme bildet der senkrechte Strich
( | ), er hat eine schwächere Bindungskraft als die hintereinanderschschriebene
Zeichen - also ab|c bdeutet NICHT wie man es annehmen würde a(b|c) sondern
(ab)|c.
Kombinationen aus *, ?, + dürfen nicht vorkommen, aus sind Mehrfachnennungen von diesen Zeichen (also ** oder ???) nicht erlaubt.
Ist ein Bindestrich dabei, so kommt er ans Ende der Liste, ist eine geöffnete eckige Klammer dabei, so kommt sie ans Ende, jedoch vor einen gegebenenfalls ebenfalls vorhandenen Bindestrich. Ist eine schließende eckige Klammer dabei, so kommt sie an den Anfang. Ist ein Zirkumflex-Akzent ( ^ ) dabei, so kommt er nicht an den Anfang; er verdrängt dabei notfalls Zeichen, die nach den voranstehenden Regeln an das Ende sollen.
Wenn die Liste fertig ist, kommt ein Zirkumflex-Akzent davor, wenn der Ausdruck die Zeichen darstellen soll, die nicht in der Liste vorkommen. Am Schluss wird das Ganze mit den Eckigen Klammern eingeschlossen.
Teile des Textes sind aus Büchern / Internetseiten kopiert, allerdings sind die Quellen nicht mehr bekannt.
Einige Dinge tauchen immer wieder auf, deshalb sind Ersatzsymbole für die regulären Ausdrücke geschaffen worden - gleichzeitig kann man diese besser lesen bzw. merken. allerdings unterliegen diese Ausdrücke länderspezifischen Einstellungen. Sonderzeichen wie in Deutschland das "ß" werden in Amerika wohl nicht auf, umgekehrt könnten andere Zeichen verwendet werden.
Welche Zeichen in einem Bereich liegen, der mit Bindestrich notiert wird, richtet
sich nach der Sortierreihenfolge, die systemweit oder benutzerspezifisch nach
den Gepflogenheiten einzelner Länder eingestellt sein kann. Spezifiziert
man explizit die "POSIX Locale" durch Setzen der Environment-Variablem
LC_COLLATE auf den Wert POSIX, so liegen wenigstens die Zeichen des ASCII-Codes
in der durch diesen Code spezifizierten Reihenfolge; über die übrigen
Schriftzeichen schweigt sich die Norm allerdings aus.
Kennt man Sortierreihenfolge und Zeichenklassen der eingestellten "Locale"
, so gibt es weitere Darstellungen von Zeichenmengen wie etwa:
[.ch.] (die Zeichenfolge ch, aber nur falls sie bei der Sortierung gemeinsam
als ein Zeichen betrachtet wird),
[=a=] (die Zeichen, die so wie a einsortiert werden) und
[:digit:] (die Zeichen, die lokal als Ziffern betrachtet werden).
Ersatzsymbol | Bedeutung |
---|---|
:alnum: | Alphanumeriche Zeichen, ersetzt [a-zA-Z0-9] |
:alpha: | Zeichen des Alphabets, ersetzt [a-z][A-Z] oder [[:upper:][:lower:]] |
:bank: | Leerzeichen und horizontaler Tabulator |
:cntrl: | Steuerzeichen |
:digit: | Numerische Zeichern (inklusive Plus / Minus), ersetzt "^[-|+]?[0-9]+" oder "^[-|+]?[0123456789]+" |
:graph: | Druckbare, sichtbare Zeichen, ersetzt [[:alpha:][:digit:][:punct:]] |
:lower: | Kleinbuchstaben, ersetzt [abcdefghijklmnopqrstuvwxyz] oder [a-z] |
:punct: | Satzzeichen, ersetzt []!"#$%&'()*+,./:;<=>?@\^_`{|}~[-] |
:print: | Alphanumerische Zeichen, ersetzt [ [:graph:]] |
:space: | Alle "weißen" Zeichen, ersetzt alle Arten des Zwischenraums, Space, Tab, Leerzeichen |
:upper: | Großbuchstaben, ersetzt [ABCDEFGHIJKLMNOPQRSTUVWXYZ] oder [A-Z] |
:xdigit: | Hexadezimale Zeichen, ersetzt [[:digit:]A-Fa-f] |
Teile des Textes sind aus Büchern / Internetseiten kopiert, allerdings sind die Quellen nicht mehr bekannt.