RegEx (mal wieder)
Powl
- php
Hallo,
scheinbar werde ich es nie kapieren. :(
Ich versuche eine regex zu konstruieren, die auf folgendes Schema passt:
xxxx_xx_xx_xx_xx_xx_#Y
____________________^^
Dabei steht x für eine Ziffer [0-1], das Gatter kann sein, gefolgt von einer Zahl Y mit beliebig vielen Ziffern. Wenn das Gatter vorhanden ist, dann muss Y [min eine Ziffer] auch vorhanden sein.
Mein Ansatz bisher ist:
"!\d{4}_\d{2}_\d{2}_\d{2}_\d{2}_\d{2}#?(\d*)?!" (IIRC)
und
"!\d{4}(_\d{2}){5}(#\d*)?!"
beide haben aber das Problem, dass sie auch auf andere pattern matchen, wie z.B.
xxxx_xx_xx_xx_xx_xx_#Y#Y
Ich finde da (im Moment?) überhaupt nicht durch, wo da mein Denkfehler liegt. Wenn mir jemand helfen würde, den zu finden, das wäre nett.
netten Tag
^da Powl
Huhu Powl,
"!\d{4}(_\d{2}){5}(#\d*)?!"
Das sieht doch schon sehr gut aus.
beide haben aber das Problem, dass sie auch auf andere pattern matchen, wie z.B.
xxxx_xx_xx_xx_xx_xx_#Y#Y
Wenn Dein Muster den gesamten String von Anfang bis Ende abdecken soll musst Du ihm das auch sagen.
Ungefähr so
^MUSTER$
Viele Grüße
lulu
Hallo,
Wenn Dein Muster den gesamten String von Anfang bis Ende abdecken soll musst Du ihm das auch sagen.
Ungefähr so
Guter Hinweis! Mit:
"!^\d{4}(_\d{2}){5}(#\d+)?$!"
tut es nun wie gewollt.
Vielen Dank, das naheliegendste finde ich oft zu letzt ;)
netten Tag
^da Powl
Hallo Powl.
Ich versuche eine regex zu konstruieren, die auf folgendes Schema passt:
Das ganze lässt sich im Übrigen auch wieder einmal wunderbar mit Stringfunktionen bewerkstelligen:
xxxx_xx_xx_xx_xx_xx_#Y
____________________^^Dabei steht x für eine Ziffer [0-1], das Gatter kann sein, gefolgt von einer Zahl Y mit beliebig vielen Ziffern. Wenn das Gatter vorhanden ist, dann muss Y [min eine Ziffer] auch vorhanden sein.
Suche dir also als erstes die letzte Position von „#“. Ist sie vorhanden, extrahierst du vom Fundort der Raute plus 1 bis zum Ende des Strings alle Zeichen, womit du deine Zahl „Y“ erhältst.
Wurde die Raute nicht gefunden, suchst du (wiederum vom Stringende ausgehend) nach „_“. Ist der Fundort plus 1 gleich der Länge des Strings, gibt es keine abschließende Zahl. Ist dem jedoch nicht so, extrahierst du äquivalent zum Vorgehen bei der Raute deine Zahl „Y“.
Einen schönen Mittwoch noch.
Gruß, Mathias
Hallo nochmal.
Suche dir also als erstes [link:http://de.php.net/manual/de/function.strrpos.php@title=die letzte Position] von „#“. Ist sie vorhanden<ins> und die Fundstelle plus 1 ungleich der Länge des Strings</ins>, [link:http://de.php.net/manual/de/function.substr.php@title=extrahierst] du vom Fundort der Raute plus 1 bis zum Ende des Strings alle Zeichen, womit du deine Zahl „Y“ erhältst.
Einen schönen Mittwoch noch.
Gruß, Mathias
Hallo Ihr,
danke für Eure Mühe, aber das Problem war doch schon gelöst. Es $_GET nur um eine Abfrage:
if (!preg_match("!^\d{4}(_\d{2}){5}(#\d+)?$!", $_GET['glintwine'])) {geh was arbeiten;} //oh nööööö!
else{ trink Glühwein}//(else besser in dem Fall, sind ja Feiertage ;) )
der regex, den ich gebaschtelt habe tut es vollkommen. (Siehe mein (vor)letzten Post. Aber vielen Dank für die Mühe.
P.S. ich befürschte uicch bin dem else Zweig schon zu ville gefolgt *trälla*
glühenden W(h)einAbend oderwasauchimmer
^da Powl
Moin!
Hallo Powl.
Ich versuche eine regex zu konstruieren, die auf folgendes Schema passt:
Das ganze lässt sich im Übrigen auch wieder einmal wunderbar mit Stringfunktionen bewerkstelligen:
Wo hast Du da die Bedingung "x steht für eine Ziffer" berücksichtigt?
-- Skeeve
Hallo Skeeve.
Ich versuche eine regex zu konstruieren, die auf folgendes Schema passt:
Das ganze lässt sich im Übrigen auch wieder einmal wunderbar mit Stringfunktionen bewerkstelligen:
Wo hast Du da die Bedingung "x steht für eine Ziffer" berücksichtigt?
OK, das verkompliziert die Sache. Da ist ein regulärer Ausdruck wohl doch besser.
Einen schönen Mittwoch noch.
Gruß, Mathias