Avatar billede dugi Nybegynder
10. marts 2005 - 08:52 Der er 21 kommentarer

Hjælp/Problemer med preg_match_all

Hej,

Det skal lige siges, at det er første gang jeg prøver, at lave noget med preg_match_all,. og patterns er ikke lige min stærke side :)
- Men jeg er støt på et lille problem.

Jeg er ved at lave et udtræk, fra en TV-guide, hvor jeg skal hente tidspunkt, titel på udsendelse, og "ekstra info".


HTML, jeg vil lave udtræk fra:
-----------------------------------------------------------
<div class='udsendelse-vises-nu'>
<div><span class='udsendelse-tid'>06:00</span>&nbsp;&nbsp;<span class='udsendelse-titel' onclick='toggleDesc(22593849);'>Go' morgen Danmark</span></div>
<div class='udsendelse-beskrivelse' style='display: block;' name='divBeskrivelseKort' id='Desc22593849Short'>- med nyheder, sport, finans, vejr og trafik.</div>
<div class='udsendelse-beskrivelse' style='display: none;' name='divBeskrivelseLang' id='Desc22593849Long'>- med nyheder, sport, finans, vejr og trafik.<br><i>(Go' morgen Danmark)</i><br>06.00 Martin & Ketil. 06.20 Tegnefilm. 06.45 Martin & Ketil. 07.00 Nyhederne og Sporten samt trafikinformation. 07.09 Vejret. 07.13 Go’ morgen Danmark. 07.30 Nyhederne. 07.33 Vejret. 07.35 Go’ morgen Danmark. 08.00 Nyhederne, Finans og Sporten. 08.13 Vejret. 08.15 Go’ morgen Danmark.<br>08.30 Nyhederne. 08.33 Vejret. 08.35 Go’ morgen Danmark. 09.00 Nyhederne og Sporten. 09.13 Vejret. 09.15 Go’ morgen Danmark (G). 10.00 Nyhederne, Finans og Sporten. 10.13 Vejret. 10.15 Go’ morgen Danmark (G).<br>  <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>
-----------------------------------------------------------




Til overtående HTML, har jeg prøvet at lave, følgende preg_match:
-----------------------------------------------------------
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);
-----------------------------------------------------------



Overstående preg_match, giver så følgende array, som jeg ikke helt forstår, hvorfor den laver "8" når jeg slet ikke har så mange (.*?) ... (- måske nogen som kan forklare mig hvorfor?):
-----------------------------------------------------------
Array
(
    [0] => Array
        (
        )

    [1] => Array
        (
        )

    [2] => Array
        (
        )

    [3] => Array
        (
        )

    [4] => Array
        (
        )

    [5] => Array
        (
        )

    [6] => Array
        (
        )

    [7] => Array
        (
        )

    [8] => Array
        (
        )

)
-----------------------------------------------------------



Jeg håber virkelig, der er nogen af jer der har styr på preg_match_all, som evt. kunne hjælpe mig, og forklare hvad jeg gør forkert, så jeg kan lære af mine fejl(?).

På forhånd TUSIND tak.


Med venlig hilsen
Morten Rugaard
Avatar billede erikjacobsen Ekspert
10. marts 2005 - 09:12 #1
Du har 8. Du tæller måske forkert her:

onclick='toggleDesc((.*?));'

hvor der er 2 parenteser, der tæller. Egentlig mener du jo nok:

onclick='toggleDesc\((.*?)\);'
Avatar billede dugi Nybegynder
10. marts 2005 - 09:13 #2
yes, men rigtig nok - men det burde da stadig ikke "ødelægge" hele min preg_match_all ?
Avatar billede dugi Nybegynder
10. marts 2005 - 09:17 #3
yes nu er den nede på 7, men virker stadig ikke :/
Avatar billede erikjacobsen Ekspert
10. marts 2005 - 09:18 #4
Så dit spørgsmål er ikke kun om der er 8, men også hvorfor der ikke kommer noget i de 8 (eller 7) positioner?
Avatar billede dugi Nybegynder
10. marts 2005 - 09:25 #5
yes lige præcis.

Jeg skal have trukket den info ud der står hvor (.*?) jo er, også printe dem :)
men hele arrayet er tomt :/

Så hvorfor er alle (0-7) tomme? :/
Kan jo ik trække tomt ud :P
Avatar billede erikjacobsen Ekspert
10. marts 2005 - 09:29 #6
Ok, det er rart at vide hvad problemet er ;)

Er du sikker på du vil have et mellemrum eller linieskift efter

preg_match_all("/

som det ser ud til du har, men som måske ikke er med i teksten?
Avatar billede dugi Nybegynder
10. marts 2005 - 09:37 #7
jeg laver linie skiftet, for at få den til at se ud præcis som den kilde, jeg vil hente fra, også står det mere i orden, så man kan se hvad der står i stedet for det hele står i en køre :)

Hvis du forstår?
Avatar billede erikjacobsen Ekspert
10. marts 2005 - 09:38 #8
Men du har ikke spor lyst til at prøve at fjerne det?
Avatar billede dugi Nybegynder
10. marts 2005 - 10:13 #9
Jo har jeg lige gjort, men virker stadig ikke :/
Avatar billede erikjacobsen Ekspert
10. marts 2005 - 10:15 #10
Ok - det virker hos mig. Men jeg ved selvfølgelig ikke i hvad sammenhæng du bruger din kode.
Avatar billede erikjacobsen Ekspert
10. marts 2005 - 10:23 #11
Avatar billede dugi Nybegynder
10. marts 2005 - 11:21 #12
ja men det virker også hvis jeg bruger et andet eksempel, men ikke lige til det eksempel i toppen :/
Avatar billede erikjacobsen Ekspert
10. marts 2005 - 11:23 #13
Jamen så er det jo nok den sammenhæng du bruger det i.
Avatar billede dugi Nybegynder
10. marts 2005 - 11:26 #14
$cnt = file_get_contents('http://tv.tv2.dk/tv/listning.php?Region=1&Kategori=0&Dato=0&Soegeord=&Periode=0&KanalID=1&sektion');

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);

print_r($m);


Dette er min fulde kode, den virker ikke - prøv den selv efter :'(
Men ja dit eksempel som du linker til virker - forstår det bare ikke
Avatar billede erikjacobsen Ekspert
10. marts 2005 - 11:30 #15
Det kan jo være fordi det er en anden tekst nu. De putter sommetider <div>...</div> ind i det du leder efter, og så fejler din (.*?)</div>
Avatar billede dugi Nybegynder
10. marts 2005 - 11:37 #16
nej det gør det ikke :o
ikke i den class='udsendelse-vises-nu' .. du kunne jo også du fik eksemplet til at virke, ved bare at bruge upklippet som html, men henter du det fra sitet så virker det ikke :/
Avatar billede erikjacobsen Ekspert
10. marts 2005 - 11:39 #17
Ja, fordi det der hentes nu indegholder et par <div>'s mere end du tror.
Har tv2 ikke en webservice med samme indhold - det er et skrøbeligt projekt du har gang i ;)
Avatar billede dugi Nybegynder
10. marts 2005 - 11:39 #18
f.eks. virker det her uden problemer, den printer bare hele listen og det vil jeg ikke have :/ ...

$cnt = file_get_contents('http://tv.tv2.dk/tv/listning.php?Region=1&Kategori=0&Dato=0&Soegeord=&Periode=0&KanalID=1&sektion');

preg_match_all("/<div class='udsendelse-vises-nu'>(.*)/s", $cnt, $m, PREG_PATTERN_ORDER);

print($m[1]);
Avatar billede erikjacobsen Ekspert
10. marts 2005 - 11:48 #19
Det ser ikke ud til at være nemt og veldefineret hvad TV2 kan finde på at skrive i deres plan - derfor siger jeg det er "skrøbeligt". Jeg har ikke nogen gode ideer, ud over at finde ud om de har en webservice til det - det er nemlig veldefineret.
Avatar billede dugi Nybegynder
10. marts 2005 - 11:49 #20
Well altså, jeg fik idéen fra dette script:
http://www.samurize.com/modules/mydownloads/visit.php?cid=10&lid=1372

Som er et script til Samurize, som gør det samme metode også fra tv.tv2.dk, men scriptet  er bare lavet i VB, eller hvert fald noget der minder om det.
Avatar billede grace45 Nybegynder
22. oktober 2010 - 19:22 #21
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.
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