preg_match Probleme

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • preg_match Probleme

    Hi php-Profis !

    ich versuche, mit preg_match_all einen bestimmten String zu zerschnibbeln. Der String sieht etwa so aus:
    CinemaxX >14:00 (3D) 17:10 (3D) 20:00 (3D) 22:00 (3D) Cinespace >12:30 (3D) 14:00 15:00 (3D) 17:30 (3D) 19:30 20:15 (3D) 22:45 (3D)
    für mich besonders schwierig: Das (3D) kann - muss aber nicht - hinter der Uhrzeit stehen.

    Mein Versuch:
    PHP-Code:
    preg_match_all("/(?<Kino>[^>]*)>(?<Zeiten>(([0-9][0-9]:[0-9][0-9].?)*\(.+?\).?)*)/",$a,$treffer,PREG_SET_ORDER
    funktioniert eigentlich:
    [Kino] => CinemaxX
    [Zeiten] => 14:00 (3D) 17:10 (3D) 20:00 (3D) 22:00 (3D)
    aber nicht wenn die letzte (3D) Angabe nicht da ist. Demnach wird
    CinemaxX >14:00 (3D) 17:10 (3D) 20:00 (3D) 22:00 Cinespace >12:30 (3D) 14:00 15:00 (3D) 17:30 (3D) 19:30 20:15 (3D) 22:45
    falsch zerschnibbelt und gibt:
    [Kino] => CinemaxX
    [Zeiten] => 14:00 (3D) 17:10 (3D) 20:00 (3D)
    die letzte zeit fehlt also und landet in der 2.ten Bezeichnung:
    [Kino] => 22:00 Cinespace
    [Zeiten] => 12:30 (3D) 14:00 15:00 (3D) 17:30 (3D) 19:30 20:15 (3D)
    Mein nächster Versuch, das (3D) extra zu gruppieren:
    PHP-Code:
    preg_match_all("/(?<Kino>[^>]*)>(?<Zeiten>(([0-9][0-9]:[0-9][0-9].?)+(\(.+?\))?.)*)/" 
    haut nicht hin. Kann mir jemand verklickern, wie es richtig sein muss ?
    Ich sage schon mal

  • #2
    Sorry, muss weg, deshalb ohne Text:

    PHP-Code:
    <?php

    $a 
    = <<<EOT
    CinemaxX >14:00 (3D) 17:10 (3D) 20:00 (3D) 22:00 (3D) Cinespace >12:30 (3D) 14:00 15:00 (3D) 17:30 (3D) 19:30 20:15 (3D) 22:45 (3D)
    EOT;

    $treffer = array();

    preg_match_all('/
        (?<Kino>
            [^>]+>
        )
        (?<Zeiten>
            (?:
                [0-9]{2}:[0-9]{2}
                (?:\x20\(3D\))?
                (?:\x20|\z)             # Leerzeichen oder Eingabeende
            )+
        )
    /x'
    $a$trefferPREG_SET_ORDER);

    var_dump($treffer);


    //array(2) {
      //[0]=>
      //array(5) {
        //[0]=>
        //string(54) "CinemaxX >14:00 (3D) 17:10 (3D) 20:00 (3D) 22:00 (3D) "
        //["Kino"]=>
        //string(10) "CinemaxX >"
        //[1]=>
        //string(10) "CinemaxX >"
        //["Zeiten"]=>
        //string(44) "14:00 (3D) 17:10 (3D) 20:00 (3D) 22:00 (3D) "
        //[2]=>
        //string(44) "14:00 (3D) 17:10 (3D) 20:00 (3D) 22:00 (3D) "
      //}
      //[1]=>
      //array(5) {
        //[0]=>
        //string(77) "Cinespace >12:30 (3D) 14:00 15:00 (3D) 17:30 (3D) 19:30 20:15 (3D) 22:45 (3D)"
        //["Kino"]=>
        //string(11) "Cinespace >"
        //[1]=>
        //string(11) "Cinespace >"
        //["Zeiten"]=>
        //string(66) "12:30 (3D) 14:00 15:00 (3D) 17:30 (3D) 19:30 20:15 (3D) 22:45 (3D)"
        //[2]=>
        //string(66) "12:30 (3D) 14:00 15:00 (3D) 17:30 (3D) 19:30 20:15 (3D) 22:45 (3D)"
      //}
    //}

    Kommentar

    Lädt...
    X