Backreferencing in RegEx Ausdruck

21/09/2010 - 13:04 von Zwerg | Report spam
Hallo,

ich versuche gerade einen RegEx Ausdruck anzupassen den ich in einem
Forum gefunden habe.
Leider funktioniert es nicht wie gewünscht.

das ist der Ausdruck den ich gefunden habe:

[\s](?:(?:[02468][048]|[13579][26])(?:[02468][048]|[13579][26])|
(?:[02468][1-35-79]|[13579][013-57-9])(?:0[48]|[2468][048]|[13579]
[26]))
([-.\/])[0]?[2]([-.\/])(29)|
\d{4}([-.\/])
(?:(?:[0]?[13578]|1[02])([-.\/])(?:[12]\d|3[01]|[0]?[1-9])|
(?:[0]?[469]|11)([-.\/])(?:[12]\d|30|[0]?[1-9])|
[0]?[2]([-.\/])(?:1\d|2[0-8]|[0]?[1-9]))[\s]

Das Problem im Ausdruck sind die Stellen mit ([-.\/]) .
Der Ausdruck findet folgendes: 2005/10.8

Also wollte ich das Backreferencing nutzen und hab diesen String
daraus erstellt:

[\s](?:(?:[02468][048]|[13579][26])(?:[02468][048]|[13579][26])|
(?:[02468][1-35-79]|[13579][013-57-9])(?:0[48]|[2468][048]|[13579]
[26]))
([-.\/])[0]?[2]\1(29)[\s]|
[\s]\d{4}([-.\/])
(?:(?:[0]?[13578]|1[02])\2(?:[12]\d|3[01]|[0]?[1-9])|
(?:[0]?[469]|11)\2(?:[12]\d|30|[0]?[1-9])|
[0]?[2]\2(?:1\d|2[0-8]|[0]?[1-9]))[\s]

Leider gibt es nun gar keinen Match mehr bei gueltigen Datumswerten.
Koennt ihr mir bitte helfen den Fehler zu finden?

Zwerg
 

Lesen sie die antworten

#1 Georg Bauhaus
21/09/2010 - 13:45 | Warnen spam
On 21.09.10 13:04, Zwerg wrote:
Hallo,

ich versuche gerade einen RegEx Ausdruck anzupassen den ich in einem
Forum gefunden habe.
Leider funktioniert es nicht wie gewünscht.
[...]
Leider gibt es nun gar keinen Match mehr bei gueltigen Datumswerten.
Koennt ihr mir bitte helfen den Fehler zu finden?



Der Fehler besteht eigentlich darin, für die syntaktische Zerlegung
eines grob und feinkörnig strukturierten Textes nur einen
regulàren Ausdruck zu verwenden. Noch dazu einen, der ganz ohne
Abstraktionen (Variablen) auskommt, so wie ein Programm ohne
Unterteilungen wie z.B. Prozeduren. Ich vermute, du kannst dir
viel Zeit und Nachdenken sparen, wenn du den Ausdruck in Teile
mit klarer Bedeutung zerlegst, diese benennst, und dann wieder
zusammen setzt.

Noch besser wàre die Hinzunahme minimalen parsings. Parsing
ermöglicht, Fehler in der Eingabe viel pràziser auffinden
und angeben zu können. Ein einfaches "passt nicht" ist, wie
man sieht, einfach in jeder Hinsicht unterlegen.


Georg

Ähnliche fragen