PHP: grep, preg

  • also irgendwie steh ich bei den grep bzw. preg Funktionen von PHP bissi an. Vielleicht kann mir jemand auf die Beine helfen:

    Ich habe z.B. die Sätze "Das heutige Datum ist 12.03.2003." und "Das morgige Datum ist 13.03.2003.". Ich weiß jetzt daß die Sätze von der Form "... Datum." sind. Wie schaffe ich es nun aus den Sätzen das Datum herauszuholen (und zwar nur das Datum), sodaß ich nachher in einem String dieses stehen habe.

    D.h.
    $datum = preg_???(...);
    -> $datum = "12.03.2003" bzw. "13.03.2003".

    oder anders ausgedrückt:
    Ich möchte nach einem Substring einer bestimmten Form in einem anderen String suchen, allerdings nicht den String als Ergebnis (so wie ihn preg_match() zurückliefert so weit ich das richtig verstehe), sondern den Substring als Ergebnis zurückbekommen.

    Ich hoffe, ich drücke mich halbwegs verständlich aus.

    *** Make it idiot proof, and someone will build a better idiot. ***

  • ich wuerde als erstes ein explode nach leerzeichen machen und danach fuer jedes ergebnis (ist ein array) entweder
    a) mittels preg_match auf datumsform durchsuchen oder
    b) wiederum ein explode nach punkt mit ueberpruefung ob dann das ergebnis 3 array-elemente mit zahlen von entsprechenden werten sind

  • erm ... ok. Das mit dem Datum war aber nur ein einfaches BSP zur Verdeutlichung. Das ist eigentlich nicht das wirkliche Ziel. Ich möchte auch nach beliebiegen, komplizierteren Ausdrücken suchen können.

    *** Make it idiot proof, and someone will build a better idiot. ***

  • Zitat von maciek

    also irgendwie steh ich bei den grep bzw. preg Funktionen von PHP bissi an. Vielleicht kann mir jemand auf die Beine helfen:

    Ich habe z.B. die Sätze "Das heutige Datum ist 12.03.2003." und "Das morgige Datum ist 13.03.2003.". Ich weiß jetzt daß die Sätze von der Form "... Datum." sind. Wie schaffe ich es nun aus den Sätzen das Datum herauszuholen (und zwar nur das Datum), sodaß ich nachher in einem String dieses stehen habe.

    D.h.
    $datum = preg_???(...);
    -> $datum = "12.03.2003" bzw. "13.03.2003".

    oder anders ausgedrückt:
    Ich möchte nach einem Substring einer bestimmten Form in einem anderen String suchen, allerdings nicht den String als Ergebnis (so wie ihn preg_match() zurückliefert so weit ich das richtig verstehe), sondern den Substring als Ergebnis zurückbekommen.

    Ich hoffe, ich drücke mich halbwegs verständlich aus.

    Als aller erstes wuerde ich den teil ``Pattern syntax'' im Teil ``Regular expressions perl compatible'' lesen.

    Hier ein paar beispiele, die das halbwags erlautern konnten ...

    ------------------------

    Um die daten aus einem string zu bekommen tuest du

    preg_match_all("/\\d{2}\\.\\d{2}\\.\\d{4}/", $derString, $a, PREG_SET_ORDER);

    das pattern beschreibt zahlx2.zahlx2.zahlx4

    und nun ausgabe der matches

    foreach ($a as $match) echo $match[0].\n"; //$match[0] ... enthalt das gematchde datum


    -----------

    Ein weiteres beispiel

    preg_match_all("/(\\d{2})\\.(\\d{2})\\.(\\d{4})/", $derString, $a, PREG_SET_ORDER);

    foreach ($a as $match) echo "datum ist $match[0]; tag: $match[1]; monat: $match[2]; yahr: $match[3];";

    $a ist ein array von matches; $a[0] ist der erste match; $a[0][0] enthalt den string der matcht; $a[0][1] das erste subpattern (=das in den ersten klammern)

    -----------

    Ist EIN datum im string ??

    if (preg_match("/\\d{2}\\.\\d{2}\\.\\d{4}/", $theString, $a)) echo "yowohl";

    $a[0] ... "19.02.2003"
    $a[1] ... "19"
    $a[2] ... "02"
    $a[3] ... "2003"

    ----------

    Ist ganzer string datum ??

    if (preg_match("/^\\d{2}\\.\\d{2}\\.\\d{4}\$/", $theString)) echo "yowohl";

    dach .... anfang vom string, dollar ... ende vom string , d.h. ganzer string= anfang, datum, ende.

    Peter

    De part de ma chandelle verte, je ne comprends pas.

  • danke. preg_match_all() ist die Funktion, die ich gesucht hab und nicht finden konnte ... die regular expressions krieg ich schon hin.

    *** Make it idiot proof, and someone will build a better idiot. ***

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!