Reguläre Ausdrücke

und anderes


Übersicht:

Reguläre Ausdrücke mit Beispielen
Posix Ersatzsymbole

Sonderzeichen in HTML
 

Reguläre Ausdrücke

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.

Inhaltsübersicht

Posix-Ersatzsymbole

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.