Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Säännöllinen lauseke hakemaan koodia

Macro [05.11.2011 12:34:08]

#

Terve taas.

Monen sadan muun rivin joukosta pitäisi poimia seuraava pätkä.

<span style="color:#F70;font-size:40px;" class="cufonthis">96</span>&nbsp;<span style="color:#F70;font-size:25px;line-height:141%;" class="cufonthis">,10</span> <span style="color:#ccc;font-size:22px;">&euro;</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ä?

-tossu- [05.11.2011 13:55:57]

#

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>&nbsp;<span style="color:#F70;font-size:25px;line-height:141%;" class="cufonthis">,10</span> <span style="color:#ccc;font-size:22px;">&euro;</span>';

$kohta = strpos ($koodi, '<span style="color:#F70;font-size:40px;" class="cufonthis">');
preg_match ('/>(\d+).*?>,(\d+)/', $koodi, $numerot, 0, $kohta);

print_r ($numerot);

Macro [05.11.2011 16:33:01]

#

Näppärä koodi. Kiitos.

LaNu [07.11.2011 21:29:39]

#

-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.

-tossu- [07.11.2011 22:27:16]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta