PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   preg_match Probleme (https://www.php-resource.de/forum/php-developer-forum/105172-preg_match-probleme.html)

LimpBiz 25-07-2015 13:40

preg_match Probleme
 
Hi php-Profis !

ich versuche, mit preg_match_all einen bestimmten String zu zerschnibbeln. Der String sieht etwa so aus:
Zitat:

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:
Zitat:

[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
Zitat:

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:
Zitat:

[Kino] => CinemaxX
[Zeiten] => 14:00 (3D) 17:10 (3D) 20:00 (3D)
die letzte zeit fehlt also und landet in der 2.ten Bezeichnung:
Zitat:

[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 :danke:

mermshaus 25-07-2015 18:19

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)"
  //}
//}



Alle Zeitangaben in WEZ +2. Es ist jetzt 20:30 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG