Und zwar ahbe ich ein Textfeld, in das ein Datum im Deutschen oder Amerikanischen Format, mit oder ohne Uhrzeit. Ich will nun mittelspreg_match herauskriegen, ob deutsch, amerikanisch oder gar kein Datum, und mittels preg_replace gegebenfalls den String so umwandeln, das er parsebar wird.
Hier mein Ansatz(erstmal nur für deutsch -> amerikanisch, der preg_matsch kommt in vereinfachter form mit einem if davor.):
-> Der Fehler matscht die Zeile mit diesem preg_replace, durch Auskommentieren weiss ich, das es am 2 Parameter liegt.
Ich habe da jetzt eine Weile dran rumgeschraubt, und alles mögliche ausprobiert, aber iwie passt es nie, oder es funzt nicht.
Wenn ihr mir helfen könnt, wäre ich euch dankbar wenn ihr euren Lösungsweg kurz beschreiben könnt, da ich das erste mal mit RegEx-Replace, und auch kaum mit RegEx arbeite.
Du kannst keine Funktion wie empty auf die Back-References wie $5 anwenden - weil es die noch gar nicht gibt zu dem Zeitpunkt, wo dieser Ausdruck ausgewertet wird; das passiert naemlich noch bevor preg_replace ueberhaupt an zu suchen faengt.
Ausserdem nimmt empty ausschliesslich Variablen als Parameter - du versuchst aber, ein Textliteral zu uebergeben.
Gut, wie lässt sich das, was ich dort versuche mit den ifs, denn auswerten?
kann man vllt irgendiwe ne Funktion dafür schreiben oder so?
Und ist mein RegEx so richtig?
Hilft mir immer noch nicht… soll ich jetzt die sachen in nen csv packen, hinterher wieder auseinaderpflücken und verarbeiten? stell ich mir nicht besonders effektiv vor^^.
Sorry, ich hab bisher nur wenig Ahnung über RegEx, was auch daran liegt, das ich bisher kein Buch kenne, das das leicht Verständlich und gut erklärt!
Wenn du so ganau werden könntest, das auch ich als Neuling auf dem Gebiet RegEx verstehe, was du meinst, wäre echt Klasse.
“Some people, when confronted with a problem, think ‘I know, I’ll use regular expressions.’ Now they have two problems.” - Jamie Zawinski
Regulaere Ausdruecke haben genau einen Einsatzzweck: Mustersuche.
Sie fuer etwas anderes gebrauchen zu wollen, ist ein Missbrauch.
Die Frage, “gibt es in diesem Text etwas, dass aus zwei Ziffern, gefolgt von einem Punkt, gefolgt von zwei Ziffern, gefolgt von … besteht” - ja, das ist eine Mustersuche.
Die Entscheidung, wenn in dem, was ich fuer eine Datumsangabe halte, keine Uhrzeit angegeben ist, dann moechte ich stattdessen “00:00” verwenden - das ist eine Frage der Programmlogik.
Also splitte deine Datumsangabe in ihre einzelnen Bestandteile auf - und schaue dir anschliessend diese Bestandteile an, und ersetze ihren Inhalt ggf. durch etwas anderes, wenn er dir nicht gefaellt.
Wofuer du allerdings eine nicht vorhandene Uhrzeitangabe ueberhaupt ersetzen moechtest, verstehe ich in diesem Zusammenhang auch nicht - strtotime ist es egal, ob du ein Datum ohne Uhrzeitangabe, oder ein Datum mit dahinterhaengendem “00:00:00” als Parameter verwendest - das Ergebnis ist das gleiche.
Em ja, den kenn ich. Sag mir wies bessere geht EDIT: Oder ist das, was ich unten gepostet habe eine gute Lösung?
Puhh…
OK, und wie trenne ich das am besten? Doch nicht etwa, in dem ich mir die einzelnen Informationen da raus fische, in ein CSV packe, und hinterher die CSV wieder auseinader fische, und dann weiterarbeite
Help please
Du meinst ich soll erst mit String-Funktionen in Tag, Monat, Jahr etc. aufteilen, die dann mit preg_match untersuchen und dann ggf. ersetzen? (*)
[quote=„chrisb“]
Wofuer du allerdings eine nicht vorhandene Uhrzeitangabe ueberhaupt ersetzen moechtest, verstehe ich in diesem Zusammenhang auch nicht - strtotime ist es egal, ob du ein Datum ohne Uhrzeitangabe, oder ein Datum mit dahinterhaengendem „00:00:00“ als Parameter verwendest - das Ergebnis ist das gleiche.[/quote]
Danke, daran hatte ich nicht gedacht. Geht es auch, das ich die Uhrzeit ohne Sekunden übergebe?
Wäre dann das hier schon ausreichend, um aus einem deutschen Datum ein amerikanisches Zu machen? Oder funzt das nicht? ODER ist die Lösung mit den Strinfunktionen(-> *) oben besser ?
War ein Beispiel, weils mir grad am schnellsten einfiel
[quote=„chrisb“]
Es gibt auch noch andere preg-Funktionen.[/quote]
Ja, klar. Und wie siehts mit der von mir geposteten Lösung mit preg_replace aus?
EDIT:
Schneint zu funzen, aber sicher ist das noch nicht wirklich, schliesslich kann man auch noch
39.19.7899 29:69:69 eingeben, selbst wenn ich das so abänder: