Regex für Uhrzeit gesucht
andi123
- perl
Hallo,
ich dachte ich wäre für einfache Regex-Aufgaben ganz fit, muß nun aber sehen, dass mir aber schon bei einer Uhrzeit-Regex die Ideen ausgehen.
Aufgabe ist zu testen, ob die Uhrzeit im folgenden Format vorliegt und die Werte fuer die Uhrzeit speichern: hh:mm:ss, wobei :ss optional ist.
Das Problem was ich habe ist, der Test auf die optionalen Sekundenangabe.
Ich hab das so loesen wollen: [1]?[0-9]:[0-5]0-9?$
Mit dem "?" am Ende wollte ich testen das ":ss" kein- oder max. einmal als Sekunden vorhanden sind.
Stimmt das so, wie ich es angegeben habe oben? Wie speichere ich dann aber die Werte fuer die Zeiten? Also in obigen Bsp. waere in $1 jetzt zwar, wenn Sekunden mit angegeben sind, die Sekunden INKL. dem ":" drin, aber ich hab die Klammern eigentlich nur drumgemacht, damit das folgende "?" weiss, auf was es sich beziehen soll.
Ausserdem woellt ich das ":" nicht mit drinhaben in $1.
Wie muss ich das richtig angeben?
Ideal waere auch noch, wenn man abfragen koennte, dass z.b. "wenn die Uhrzeit mit 2 Stellen angegeben ist, die erste Stelle nur 0,1 oder 2 sein kann".
Ich weiss das es geht, wuesste aber keinen Ansatz bzw. wonach ich suchen muesste, um mich da einzuarbeiten.
Vielen Dank
Andi
012 ↩︎
Hi,
aha. Demnach wäre "9:00:00" entgegen der Vorgabe "hh:mm:ss" korrekt, "28:00:00" auch.
Stimmt das so, wie ich es angegeben habe oben?
Bedingt. An den Stunden musst Du noch arbeiten; und die Doppelpunkte musst Du übrigens auch nur unter einer Bedingung maskieren, die Du vermutlich vermeiden kannst.
Wie speichere ich dann aber die Werte fuer die Zeiten?
Indem Du Klammern setzt. Siehe
perldoc perlre
ich hab die Klammern eigentlich nur drumgemacht, damit das folgende "?" weiss, auf was es sich beziehen soll.
Wie man Klammern setzt, ohne dass $n gefüllt werden, steht ebenfalls in perlre.
Ideal waere auch noch, wenn man abfragen koennte, dass z.b. "wenn die Uhrzeit mit 2 Stellen angegeben ist, die erste Stelle nur 0,1 oder 2 sein kann".
Das hast Du bereits. Allerdings entspricht das "wenn" nicht der Vorgabe, die nur zweistellige Stundenwerte erlaubt; und abhängig vom Wert der ersten Stelle ist der Wertebereich der zweiten Stelle begrenzt. Dies findet sich ebenfalls nicht in Deiner RegExp wieder.
Cheatah
012 ↩︎
Hey,
schon mal hier versucht?
http://regexlib.com/default.aspx
mfg
Hi!
schon mal hier versucht?
http://regexlib.com/default.aspx
Ja, da findet man 'ne Menge...
Wenn man aber selbst die RegExps schreiben will, dann empfehle ich The RegEx Coach.
Sehr hilfreiches Werkzeug zum Entwickeln und Testen. Freeware.
Linuxversion wird leider nicht mehr weiterentwickelt.
Schöner Gruß,
rob
schon mal hier versucht?
http://regexlib.com/default.aspx
Ja, da findet man 'ne Menge...
Wenn man aber selbst die RegExps schreiben will, dann empfehle ich The RegEx Coach.
Vielen Dank fuer die beiden Tipps.
Auch an die anderen beiden.
Werd ich probieren, leider wirds ein learning bei doing werden und nicht ein "lernen, weil ich verstehe was da passiert". :-)
Danke Andi
Hi!
Werd ich probieren, leider wirds ein learning bei doing werden und nicht ein "lernen, weil ich verstehe was da passiert". :-)
Ja also das Programm ist auch klasse zum Lernen.
So mußt du nicht jedesmal wieder etwas an deiner Funktion ändern und dann die Seite aufrufen.
Du kannst in dieses Programm deinen RegEx reinschreiben und dann deine Uhrzeiten. Du siehst dann sofort, ob der RegEx die Uhrzeit futtert oder nicht.
Außerdem liegt dem Programm auch noch ein Tutorial bei.
Zum Entwickeln von RegExps ist das Ding außerdem so verdammt gut, weil du dir deinen RegEx damit in einer Baumstruktur anschauen kannst (Registerkarte "Tree").
Außerdem kann dir das Programm sozusagen in normaler Sprache sagen, was dein RegEx macht.
Naja, das Programm hat einiges an Möglichkeiten. Ist IMHO ein wirklich schönes und verdammt nützliches Teil.
Schöner Gruß,
rob
gudn tach!
fuer den fall, dass du nur pruefen willst, ohne werte zwischenzuspeichern:
/^(?:2[0-3]|[01]?[0-9])(?::[0-5][0-9]){1,2}\z/
erklaerung findet sich im bereits von Cheatah genannten manual
perldoc perlre.
falls du die stunden, minuten und sekunden in $1, $2 und $3 haben moechtest:
/^(2[0-3]|[01]?[0-9]):([0-5][0-9])(?::([0-5][0-9]))?\z/
prost
seth