Avatar billede dugi Nybegynder
24. september 2005 - 16:14 Der er 16 kommentarer og
1 løsning

Problem med preg_match_all !

Hej Eksperter,

Jeg er i gang med et projekt i skolen og er begyndt at "lege" lidt med det her i weekenden. Jeg skal lave et script som viser nuværende program i TV'et via TV2's TV-Guide.

Hermed min kode.

Det som den skal fange (program taget fra guiden pt.):
<div class='udsendelse-vises-nu'>
<div><span class='udsendelse-tid'>13:25</span>&nbsp;&nbsp;<span class='udsendelse-titel' onclick='toggleDesc(25243820);'>Cykling: VM - landevej, U23, direkte</span></div>
<div class='udsendelse-beskrivelse' style='display: block' name='divBeskrivelseKort' id='Desc25243820Short'><img src='http://inc.tv2.dk/images/dummy.gif' height='1' width='1'></div>
<div class='udsendelse-beskrivelse' style='display: none;' name='divBeskrivelseLang' id='Desc25243820Long'>  <div align='right' style='margin-top:2px;'>  <a href='/paamindelser/' target='_top'><img src='/images/paamind_inaktiv.gif' border='0' alt='Påmindelse' title='For at benytte påmindelser skal du være TV2 Login bruger'> <span title='For at benytte Påmindelser skal du være TV2 Login bruger' class='program_ikon_inaktiv'>Påmindelse</span></a>  <a href='/tvuge/' target='_top'><img src='/images/tvuge_inaktiv.gif' border='0' alt='tv-uge' title='For at benytte tv-ugen skal du være TV2 Login bruger'> <span title='For at benytte tv-ugen skal du være TV2 Login bruger' class='program_ikon_inaktiv'>tv-uge</span></a>  </div>

</div>
</div>


Min preg_match_all ser således ud:
preg_match_all("/<div class='udsendelse-vises-nu'>
<div><span class='udsendelse-tid'>(.*?)<\/span>&nbsp;&nbsp;<span class='udsendelse-titel' onclick='toggleDesc\((.*?)\);'>(.*?)<\/span><\/div>
<div class='udsendelse-beskrivelse' style='display: block;' name='divBeskrivelseKort' id='Desc(.*?)Short'>(.*?)<\/div>
<div class='udsendelse-beskrivelse' style='display: none;' name='divBeskrivelseLang' id='Desc(.*?)Long'>(.*?)<\/div>

<\/div>
<\/div>/s", $cnt, $m, PREG_PATTERN_ORDER);


Det eneste jeg får er tomme arrays, hvor strukturen er således:
Array
(
    [0] => Array
        (
        )

    [1] => Array
        (
        )

    [2] => Array
        (
        )

    [3] => Array
        (
        )

    [4] => Array
        (
        )

    [5] => Array
        (
        )

    [6] => Array
        (
        )

    [7] => Array
        (
        )

)



Jeg kunne virkelig godt tænke mig at finde ud af hvad problemet er, nu har jeg prøvet alt i løbet af den sidste time og mit temperement kan snart ikke holde til det :)

Håber virkelig der er en ekspert eller to i preg_match_all :)
På forhånd tak :)
Avatar billede udvikler Nybegynder
24. september 2005 - 16:27 #1
Avatar billede dugi Nybegynder
24. september 2005 - 16:29 #2
har læst det hele igennem tonsvis af gange, forstår simepelthen ikke hvorfor dette ikke virker!
Avatar billede ksoren Nybegynder
24. september 2005 - 16:41 #3
Du har i hvert fald en fejl her:

tekst: style='display: block'

pattern: style='display: block;'
Avatar billede nielle Nybegynder
24. september 2005 - 16:44 #4
Prøv med dette noget simplere version:

preg_match_all("!<div class='udsendelse-vises-nu'>\s*<div><span class='udsendelse-tid'>([^<]+)</span>&nbsp;&nbsp;<span class='udsendelse-titel' onclick='toggleDesc(.*?);'>([^<]+)</span></div>!sg", $cnt, $m);
Avatar billede nielle Nybegynder
24. september 2005 - 16:45 #5
Rettelse:

preg_match_all("!<div class='udsendelse-vises-nu'>\s*<div><span class='udsendelse-tid'>([^<]+)</span>&nbsp;&nbsp;<span class='udsendelse-titel' onclick='toggleDesc\(.*?\);'>([^<]+)</span></div>!sg", $cnt, $m);
Avatar billede dugi Nybegynder
24. september 2005 - 16:48 #6
nielle -> Det virker desværre ikke ;/
den printer stadig et tomt array
Avatar billede nielle Nybegynder
24. september 2005 - 16:52 #7
Også hvis du efterfølger den med denne?

foreach ($m[1] as $enMatch)
{
    echp $emMatch . "<br>";
}
Avatar billede dugi Nybegynder
24. september 2005 - 16:52 #8
Nu spørg jeg måske dumt, men kan det være fordi at den ikke henter sourcen fra sitet?
For hvis jeg kører den som den skal hente fra TV2 virker den ikke, men C/P'er jeg udklippet ind, så virker den.

Jeg henter indholdet sådan her:

$url = 'http://tv.tv2.dk/tv/listning.php?Region=1&KanalID=2&Soegeord=&Dato=0&Periode=2&Kategori=0'; // TV2 Zulu
$cnt = file_get_contents($url)
Avatar billede dugi Nybegynder
24. september 2005 - 16:53 #9
det virker jo ikke, når hele arrayet er tomt :)
Avatar billede nielle Nybegynder
24. september 2005 - 17:05 #10
Alle de steder hvor at der er et linjeskift i kilden så skal du i dit pattern i stedet have denne \s*? i dit pattern - hvorefter du skal slette linjesktiftet.
Avatar billede dugi Nybegynder
24. september 2005 - 17:10 #11
Det virker heller ikke ;(
Avatar billede dugi Nybegynder
24. september 2005 - 17:14 #12
Næ, hov du har sgu fat i noget her :D
Arbejder videre med det, får jeg det til at virke, vender jeg tilbage med dine point ;)
Avatar billede nielle Nybegynder
24. september 2005 - 17:31 #13
Der skulle lige tages højde for nogle variationer, men denne version skriver alle programmerne ud sammen med deres sendetidspunkt:

<?
$url = 'http://tv.tv2.dk/tv/listning.php?Region=1&KanalID=2&Soegeord=&Dato=0&Periode=2&Kategori=0'; // TV2 Zulu
$content = file_get_contents($url);

preg_match_all("!<div><span class='udsendelse-tid'>([^<]+)</span>&nbsp;&nbsp;<span class='udsendelse-titel'

onclick='toggleDesc\(.+?\);'>([^<]+)</span>( <span class='udsendelse-symboler'>.+?</span>)?</div>!", $content, $matches);

for ($idx=0; $idx<count($matches[1]); $idx++)
{
    echo $matches[1][$idx] . " " . $matches[2][$idx] . "<br>";
}
?>
Avatar billede dugi Nybegynder
24. september 2005 - 17:50 #14
Ja det ser godt ud, men har selv fået fixet min egen, som udskriver tidspunkt og navn, nuværende og senere programmer.

Tusind tak for hjælpen.
Smid et svar, så du kan få dine fortjente point :)
Avatar billede nielle Nybegynder
24. september 2005 - 17:54 #15
Hvordan ser din egen løsning ud?

Svar :^)
Avatar billede dugi Nybegynder
24. september 2005 - 18:02 #16
$atm_pattern = "/<div class='udsendelse-vises-nu'>\s*<div><span class='udsendelse-tid'>(.*?)<\/span>&nbsp;&nbsp;<span class='udsendelse-titel' onclick='toggleDesc\((.*?)\);'>(.*?)<\/span><\/div>\s*<div class='udsendelse-beskrivelse' (.*?) name='divBeskrivelseKort' id='Desc(.*?)Short'>(.*?)<\/div>\s*<div class='udsendelse-beskrivelse' style='display: none;' name='divBeskrivelseLang' id='Desc(.*?)Long'>(.*?)<\/div>\s*<\/div>\s*<\/div>/s";
  $count = preg_match_all($atm_pattern, $cnt, $count);
  if ($count > 0)
  {
      preg_match_all($atm_pattern, $cnt, $atm, PREG_SET_ORDER);
      print '
  <tr>
    <td>
    <table style="width: 500px" cellspacing="0" cellpadding="0">
      <tr>
        <td style="font-weight: bold">TV2 Zulu - Lige nu:</td>
      </tr>';
    for($i = 0; $i < $count; $i++)
    {
      print '
      <tr>
        <td>'.$atm[$i][1].' - '.$atm[$i][3].'</td>
      </tr>';
    }
    print '
    </table>
    </td>
  </tr>';
  }


MEGA rodet, skal først til at rette og optimere den nu :)
Men tusind tak for hjælpen :)
Avatar billede grace45 Nybegynder
22. oktober 2010 - 18:37 #17
Hej min kære,
Hvordan har du i dag, jeg håber, at alle er godt med dig. Jeg er ked af at bekymre dig med min Forslag til et forhold med dig, men jeg ved, at du vil imødekomme min anmodning i god tro og forståelse. Jeg har brug for dig i forretningsbetingelser og rådgive. Mit navn er Grace Dabah jeg bare gik gennem din profil har ingen andre muligheder end at lade dig vide, at jeg er interesseret i at have et forhold med dig, vil jeg også gerne vide dig mere, kan du sende en mail til min e-mail adresse (grace_11dabah @ yahoo.com), så jeg kan sende dig flere oplysninger om mig selv inklusive mit billede. Jeg tror, vi kan gå herfra. Men huske på, at kærlighed ikke har nogen farver barriere, ingen uddannelsesmæssige tilbage jorden barriere, ingen socio-økonomiske barrierer, religiøse, sprog, nationalitet eller afstand hindring, det eneste vigtige der er kærlighed. Jeg venter på din mail til min e-mail adresse ovenfor.
Med venlig hilsen,
Miss Grace.
grace12.JPG (91KB, 336 x 576)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester