Terve taas.
Monen sadan muun rivin joukosta pitäisi poimia seuraava pätkä.
<span style="color:#F70;font-size:40px;" class="cufonthis">96</span> <span style="color:#F70;font-size:25px;line-height:141%;" class="cufonthis">,10</span> <span style="color:#ccc;font-size:22px;">€</span>
Koodin numerot 96 (ensimmäisen span-tagin sisällä) ja 10 (toisen span-tagin sisällä) muuttuvat. Miten tuommoinen mahtaisi löytyä kaiken koodin joukosta ja miten se sijoitetaan sieltä muuttujaan PHP:llä?
Haluat ilmeisesti parsia jonkun muun sivun lähdekoodista joitain tietoja. Säännölliset lausekkeet eivät välttämättä ole paras ratkaisu, mutta kyllä se niilläkin onnistuu. Mikäli aiot hakea muitakin tietoja, harkitse koodin parsimista kunnolla.
Säännölliseksi lausekkeeksi saat tuon laittamalla numeroiden tilalle (\d+)
ja escapettamalla muut merkit tarvittaessa. Esimerkissäni koodin alku kuitenkin haetaan strpos-funktiolla, jolloin lausekkeesta tulee huomattavasti lyhyempi.
$koodi = '<span style="color:#F70;font-size:40px;" class="cufonthis">96</span> <span style="color:#F70;font-size:25px;line-height:141%;" class="cufonthis">,10</span> <span style="color:#ccc;font-size:22px;">€</span>'; $kohta = strpos ($koodi, '<span style="color:#F70;font-size:40px;" class="cufonthis">'); preg_match ('/>(\d+).*?>,(\d+)/', $koodi, $numerot, 0, $kohta); print_r ($numerot);
Näppärä koodi. Kiitos.
-tossu- kirjoitti:
Haluat ilmeisesti parsia jonkun muun sivun lähdekoodista joitain tietoja. Säännölliset lausekkeet eivät välttämättä ole paras ratkaisu, mutta kyllä se niilläkin onnistuu.
Säännölliset lausekkeet sopivat siihen ns. viimeiseen vaiheeseen. HTML:ää ohjelmallisesti tutkittaessa kannattaa etsia se viimeisin varma id-attribuutti ja hypätä sinne (esim. jollain DOM-työkalulla). Sen jälkeen sitten regexillä voi hoitaa homman, jos ei DOMissa pääse enää pidemmälle.
-tossu- kirjoitti:
Mikäli aiot hakea muitakin tietoja, harkitse koodin parsimista kunnolla.
Olisiko tossulla heittää jotain ajatuksia kunnolla parsimisesta? Itse olen jonkin verran harrastanut muiden sivujen käsittelyä PHP:lla ja yleensä se HTML-koodi on melko kurjaa. Toki vuosien edetessä laatu on parantunut.
Ajatukseni sivun parsimisesta oli käyttää DOMDocument::loadHTML -funktiota, jonka pitäisi PHP:n manuaalin mukaan parsia myös huonoa koodia. Google löytää myös aika monta PHP:llä tehtyä HTML-parseria, jotka suoriutunevat tarvittaessa vielä huonommasta koodista.
Vähän tapauksesta riippuen niillä saanee tehtyä huomattavasti regexp-viritystä selkeämmän parserin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.