Werbebanner
- Werbung -

REGEXP Info.

Was sind "Regular Expressions"?
Der Begriff "Regulärer Ausdruck" ist Euch sicher schon einmal untergekommen?! Reguläre Ausdrücke werden verwendet, um Zeichenketten auf einen bestimmten Inhalt zu überprüfen. Der Reguläre Ausdruck beschreibt ein Muster, d.h. es wird nicht eine bestimmte Zeichenfolge sondern eigentlich mehrere Zeichenfolgen beschrieben. Enthält nun eine Zeichenkette eine Zeichenfolge, die durch das Muster beschrieben wird, so erfüllt die Zeichenkette das Muster.
Regular Expressions stellen eine Reihe spezieller Zeichen zur Verfügung, die in Kombination mit verschiedenen Operatoren und sogenannten "Wildcards" sowie Abhängigkeit von bestimmten Bedingungen das benötigte Suchmuster beschreiben.
Es gibt verschiedene Implementationen von Regular Expressions, Eudora basiert auf der bekannten POSIX-Implementation.


Begrifflichkeiten (Glossar).
Zunächst einige wichtige Erklärungen zu Definitionen in Zusammenhang mit "Regular Expressions".

Zeichen Ein einzelnes Zeichen w.z.b. "A", "3", "+" oder "."
Zeichenfolge Eine Folge von Zeichen w.z.b. "ABC", "12345", "Wort" oder "$jK_M/V%h"
Zeichengruppe Eine in "( )" (Klammern) eingeschlossene Folge von Zeichen w.z.b. "(ABC)", "(12345)", "(246|357)", "(Wort)" oder "($jK_M/V%h)"
(siehe unten)
Zeichen-Set Eine in "[ ]" (Brackets) eingeschlossene Zeichenfolge
(siehe unten)
Subexpression Eine "Regular Expression" innerhalb einer "RegularExpression"


"Regular Expression Verbs"
Eudora bietet 2 verschiedene "Verben" (Filtermethoden) zur Aktivierung der Filterung per Regular Expressions an:

matches regexp "case sensitive" d.h. Groß-/Kleinschreibung wird beachtet
matches regexp (case insensitive) "case insensitive" d.h. Groß-/Kleinschreibung wird ignoriert


"Regular Expression Characters"
Diese speziellen Sonderzeichen dienen zur Definition der Suchstrings auf Basis von Regular Expressions.

.
Periode  -  Die sogenannte "Wildcard". Repräsentiert irgendein Zeichen einschließlich Leerzeichen. Insbesondere geeignet, gefolgt von einem Multiplikator (Asterisk, Fragezeichen, Pluszeichen), zum Finden von keinem, einem oder mehreren unspezifizierten Zeichen.
Beispiele:
".1" findet "a1" oder "B1" oder "c1" oder " 1" oder "<sp>1" etc.
"1.3" findet "123" oder 1z3" oder "1 3" oder "1\3" etc.
"123.*567" findet "123567" oder "1234567" oder "123bla blah blahfasel?567" w.z.b. auch "Mit 123 fängts an, mit 567 gehts weiter" etc.
?
Fragezeichen  -  Ein Multiplikator für das vorherige Zeichen, Zeichen-Set, Zeichengruppe oder Subexpression. Findet kein oder ein Zeichen der vorherigen Bedingung.
Beispiele:
"Web-?Site" findet "Website" oder "Web-Site" etc.
"Clicki?n?g?" findet "Click" oder "Clicking" oder "Clicki" oder "Clickin" etc.
"Click(ing)? Here" findet "Click Here" oder "Clicking Here" etc.
"Click ?Here" findet "Click Here" oder "ClickHere" etc.
(Bedeutung der Zeichen "( )" siehe unter "Klammern")
*
Asterisk  -  Ein Multiplikator für das vorherige Zeichen, Zeichen-Set, Zeichengruppe oder Subexpression. Findet kein oder mehrere Zeichen der vorherigen Bedingung.
Beispiele:
"12*3" findet "123" or "13" or "1223" oder "12222222223" etc.
".*\.com" findet ".com", also auch "anything.com", "aol.com" oder "www.fountainofspam.com" etc.
(Bedeutung des Zeichens "\" siehe unter "Backslash")
+
Pluszeichen  -  Ein Multiplikator für das vorherige Zeichen, Zeichen-Set, Zeichengruppe oder Subexpression. Findet eines oder mehrere der vorherigen Bedingungen, außer keine.
Beispiele:
"12+3" findet "123" oder "1223" oder "1222222223" etc.
"http://[0-9]+\.[0-9]+\.0-9]" findet "http:1.2.3" oder "http://123.45.678" etc.
(Bedeutung der Zeichen "[ ]" und "\" siehe unter "Brackets" und "Backslash")
|
"ODER"  -  "Teiler" zwischen Zeichen, Zeichenfolgen oder Ausdrücken um "ENTWEDER - ODER" zu finden.
Beispiele:
"This|that|the other" findet "This" oder "that" oder "the other" etc.
"This and (that|the other)" findet "This and that" oder "This and the other" etc.
(Bedeutung der Zeichen "( )" siehe unter "Klammern")
[ ]
"Brackets"  -  Werden verwendet um ein Zeichen-Set zu definieren von dem ein und nur eines gefunden wird, es sei denn, es wird z.b. durch "{ }" anderes definiert.Wird "-" innerhalb der Brackets sowie innerhalb der enthaltenen Zeichen verwendet, wird ein Bereich "VON - BIS" definiert. Als erstes oder letztes Zeichen innerhalb der Brackets hat es keine besondere Bedeutung.
Das Auslassungszeichen "ˆ" an erster Stelle innerhalb der Brackets, kehrt deren Bedeutung zu "NICHT DIESES" um. Dies gilt nur für alphanumerische Zeichen.
Andere Sonderzeichen verlieren ihre Fähigkeit innerhalb der Brackets.
Beispiele:
"[aeiou]" findet jede übereinstimmung mit einem der Zeichen.
"[howdy ]" findet jede übereinstimmung mit einem der Zeichen oder einem Leerzeichen.
"[0-9a-z]" findet jede Zahl von 0 - 9 oder jeden Buchstaben von a - z sowie auch von A - Z bei "case insensitiver" (Groß-/Kleinschreibung wird nicht beachtet) Suche.
"[$0-9]{5}" findet 5 Sequenzen des Dollarzeichens oder der Zahlen 0 - 9.
"123[^A-F]456" findet "123(irgendein Zeichen außer A - F)456".
"[A-Z]<!--" findet Worte, die von HTML-Kommentarzeichen unterbrochen werden.
(Bedeutung der Zeichen "{ }" und "-" oder "^" siehe unter "Geschweifte Brackets", "Minuszeichen" und "Caret")
{ }
"Geschweifte Brackets"  -  Ein numerischer Multiplikator, als Nummer z.b. {5} oder Bereich z.b. {2,6} angegeben, der die Häufigkeit des vorherigen Zeichens, Zeichen-Set, Zeichengruppe oder Subexpression benennt.
Beispiele:
"ABC{4}D" findet "ABCCCCD" etc.
"ABC{2,4}D" findet "ABCCD" or "ABCCCD" or "ABCCCCD" jedoch nicht "ABCD" oder "ABCCCCCD".
"(Http:.*){3}" findet jedes Vorkommen der Zeichenfolge "Http:", getrennt von irgendwelchen anderen Zeichen oder Zeichenfolgen, also z.b. 3 HTTP-Links in einer Mail o.ä.
(dies liegt an der in Klammern eingeschlossenen Kombination der "Wildcards")
"(Http:){3}" findet hingegen nur "Http:Http:Http:".
"\$.?.?.,?[0-9]{3}" findet "$1000" or "$1,000" or "$22,000" or "$3,456,789".
(Bedeutung der Zeichen "( )" siehe unter "Klammern")
( )
"Klammern (Parenthesis)"  -  Erzeugt eine Gruppe von Zeichen oder Subexpressions, häufig in Verbindung mit dem "|" (OR) Symbol. Zeichengruppen und Subexpressions können überall verwendet werden, ein einzelnes Zeichen nur in Verbindung mit anderen Multiplikatoren.
Beispiele:
"Dies und (das|das andere)" findet "Dies und das" oder "Dies und das andere" etc.
"123( otherword )?456" findet "123456" oder "123 otherword 456" etc.
"123( )*ABC" findet "123( irgendeine anzahl leerzeichen )ABC".
^
"Caret"  -  Wird es außerhalb von Brackets verwendet, repräsentiert es den Anfang einer Zeile d.h., das folgende Zeichen ist das erste Zeichen einer Zeile. Wird es als erstes Zeichen innerhalb von Brackets verwendet w.z.b. "[^blahblah]", bedeutet es dahingegen "NICHT DIESES"...
Beispiele:
"^Adv:" findet, wenn im Subject angewendet z.b. Subjects die mit "Adv:" beginnen.
"^<X-Html>" findet "<X-Html>", aber nur wenn es am Anfang einer Zeile steht.

Anmerkung: Eudora behandelt jeden Header als eine Zeile sowie den kompletten Body einer Mail ebenfalls als nur eine Zeile.
$
"Dollarzeichen"  -   Repräsentiert das Ende einer Zeile d.h., das vorherige Zeichen ist das letzte Zeichen einer Zeile.
Beispiele:
"^A.*Z$" findet, wenn z.b. auf "Any Header" angewendet, jeden Header, dessen erstes Zeichen ein "A" und letztes Zeichen ein "Z" ist.

Anmerkung: Eudora behandelt jeden Header als eine Zeile sowie den kompletten Body einer Mail ebenfalls als nur eine Zeile.
-
"Minuszeichen"  -  Wird es innerhalb von Brackets und eingeschlossen von 2 alphanumerischen Zeichen verwendet, bezeichnet es eine Range (einen Bereich) von Zeichen zur Suche. Ansonsten wird es als normales Zeichen behandelt.
Beispiele:
"[a-z]" findet jedes Zeichen zwischen "a" und "z" oder auch "A" bis "Z" (with case-insensitive match)
"[0-9a-z]" findet jede Zahl zwischen 0 - 9 und blahblah
"[-a-z]" findet ein "-", a - z oder A - Z
"[0-9-]" findet jede Zahl zwischen 0 - 9 und blahblah oder ein "-".
\
"Backslash"  -   Dies ist das sogenannte "Escape-Zeichen" mit einer speziellen Aufgabe. Es setzt die besonderen Fähigkeiten der anderen speziellen Zeichen außer Kraft. Dies ist z.b. notwendig, wenn nach eben diesen Zeichen gesucht werden soll.
Beispiele:
"123\.456" findet "123.456"
"123\\456" findet "123\456"
"attached-file\.(com|exe|bat)" findet "attached-file.com" oder "attached-file.exe" oder "attached-file.bat"


"Regular Expression Classes"
Diese ebenfalls speziellen Ausdrücke bieten weitere Möglichkeiten zur Definition von Suchstrings.

[[:alpha:]]
"[[:alpha:]]"  -   Repräsentiert irgendein alphabetisches Zeichen (genau wie "[a-z]").
Andere Zeichen können in die Suche eingeschlossen werden, wenn sie innerhalb der äußeren Brackets stehen. "[^[:alpha:]]" hingegen repräsentiert ein nicht alphabetisches Zeichen.
[[:digit:]]
"[[:digit:]]"  -   Repräsentiert irgendein numerisches Zeichen (genau wie "[0-9]").
Andere Zeichen können in die Suche eingeschlossen werden, wenn sie innerhalb der äußeren Brackets stehen. "[^[:digit:]]" hingegen repräsentiert ein nicht numerisches Zeichen.
Beispiele:
"abc[[:digit:]]def" findet "abc1def" or "abc7def" etc.
"a[[:digit:]!@$]b" findet "a1b" or "a!b" or "a@b" or "a$b" etc.
[[:blank:]]
"[[:blank:]]"  -   Repräsentiert ein <space> oder <tab>.
Andere Zeichen können in die Suche eingeschlossen werden, wenn sie innerhalb der äußeren Brackets stehen. "[^[:blank:]]" ist in diesem Kontext irrelevant...
[[:punct:]]
"[[:punct:]]"  -   Repräsentiert irgendein "Punktuations"-Zeichen. Dies sind alle sichtbaren Zeichen außer alphanumerischen Zeichen, "Space" und "Tab".
Andere Zeichen können in die Suche eingeschlossen werden, wenn sie innerhalb der äußeren Brackets stehen. "[^[:punct:]]" ist in diesem Kontext irrelevant...
Beispiele:
"123[[:punct:]]456" findet "123!456" or "123&456" or "123@456".
[[:space:]]
"[[:space:]]"  -   Repräsentiert irgendein "Whitespace"-Zeichen ("Space", "Tab", "Carriage Return" und "Linefeed").
Andere Zeichen können in die Suche eingeschlossen werden, wenn sie innerhalb der äußeren Brackets stehen. "[^[:space:]]" ist in diesem Kontext irrelevant...
Beispiele:
"123[[:space:]]456" findet "123 456" or "123<tab>456" or "123<cr>456", aber z.b. nicht "123<cr><lf>456" etc.
"Click([[:space:]]{3})?Here" findet "ClickHere" or "Click Here" or "Click<sp><cr><lf>Here" etc.
[[:graph:]]
"[[:graph:]]"  -   Repräsentiert irgendein darstellbares Zeichen. "[^[:graph:]]" ist in diesem Kontext irrelevant...
Beispiele:
"123[[:graph:]]456" findet "123 456" oder "123@456" oder "123A456" etc.
[[:cntrl:]]
"[[:cntrl:]]"  -   Repräsentiert irgendein nicht druckbares Zeichen w.z.b. "Carriage Return" oder "Linefeed". "[^[:cntrl:]]" hingegen repräsentiert ein druckbares Zeichen...
Beispiele:
"Hello[[:cntrl:]]{2}Bye!" findet:

"Hello
Bye!"
[[:alnum:]]
"[[:alnum:]]"  -   Repräsentiert irgendein alphanumerisches Zeichen (genau wie "[0-9a-z]"). "[^[:alnum:]]" hingegen repräsentiert ein nicht alphanumerisches Zeichen.
[[:xdigit:]]
"[[:xdigit:]]"  -   Repräsentiert irgendein hexadezimales Zeichen ("0123456789ABCDEF"). "[^[:xdigit:]]" hingegen repräsentiert ein nicht hexadezimales Zeichen.


Anmerkungen
Letztendlich macht "contains", "doesn't contain", "regexp", oder "regexp" nichts anderes, als bestimmte Zeichen, Zeichenfolgen, -gruppen oder -Sets innerhalb größerer Zeichenfolgen, -gruppen oder -Sets zu finden. Bei der Definition der Suchstrings sollte man deshalb daran denken, daß z.b. die Suche nach der Zeichfolge "sex" neben "Sex" selbst, auch "Essex", "heterosexuell" oder "Sextant" findet.