PHP - RegEx matched nur den letzten Datensatz

  • Guten Morgen Jungs und Mädels,
    ich habe ein Problem mit regulären Ausdrücken. Und zwar scheine ich mit preg_match() immer nur den letzten Datensatz aus einem String lesen zu können.

    Meine Daten habe ich in folgender Form in einem String gespeichert:
    Name:Alter;Name:Alter;...

    Beispiel:
    Max:12;Moritz:14;Boris:43;
    Tarzan:23;

    Dies ist meine Anweisung, mit dem ich den o.g. string durchsuche:

    PHP
    preg_match('/(?:([\w]*):([0-9]*);)*/',$subject,$matches);

    Als Ausgabe von var_dump($matches); erhalte ich aber nur:

    HTML
    array(3) {
      [0]=>
      string(36) "Max:12;Moritz:14;Boris:43;Tarzan:23;"
      [1]=>
      string(6) "Tarzan"
      [2]=>
      string(2) "23"
    }

    Nun meine Frage:
    Was muss ich an dem pattern ändern, um alle Datensätze zu erhalten? Wichtig ist, dass es wohl bis zu mehreren hundert Datensätzen kommen kann.
    Oder gibt es vielleicht eine andere Möglichkeit außer RegEx, um an die Daten heranzukommen?

    Gruß,
    Orbis

    2 Mal editiert, zuletzt von Orbis (13. November 2009 um 14:23)

  • preg_match_all() wendet den regulären Ausdruck auf den kompletten Text an.

    Bei folgenden Beispiel:

    Zitat


    Max:12;Moritz:14;Boris:43;Tarzan:23;

    Du könntest auch ein explode(";", $data); und explode(":", $data); machen. z.B.:

    PHP
    <?php$data = "Max:12;Moritz:14;Boris:43;Tarzan:23";$data = explode(";", $data);foreach ($data as $line){    $userdata = explode(":", $line);    print '<pre>';    print_r($userdata);    print '</pre>';}?>

    Gruß crAzywuLf :D

    3 Mal editiert, zuletzt von crAzywuLf (13. November 2009 um 14:04)