PDA

View Full Version : [PHP] Recupero dati con regex


Alhazred
23-02-2012, 10:20
Leggo una pagina web con file_get_contents(), parte del codice che ricevo è questo

<div class="dataBoxWrap">
<div class="dataBox">
<div class="times">
<p class="dataItem"><span class="dataHead">Departs</span>11:58</p>
<p class="dataItem arrival"><span class="dataHead">Arrives</span>12:23</p>
<!-- /times -->
</div>
<p class="dataItem ml25"><span class="dataHead">Approximate travel time</span><span class="noticeTxt01 noticeTxt02">25 mins</span></p>
<!-- /dataBox -->
</div>
<div class="dataBox">
<p class="dataItem"><span class="dataHead">Fare</span>
(Adult)<span class="noticeTxt01 noticeTxt02 mr05">190yen</span>
(Child)<span class="noticeTxt01 noticeTxt02">100yen</span>
</p>
<p class="dataItem ml25"><span class="dataHead">Number of transfers</span><span class="noticeTxt01 noticeTxt02 mr05">1</span></p>
<!-- /dataBox -->
</div>
<!-- /dataBoxWrap -->
</div>

L'intento è recuperare i dati "Approximate travel time" e i prezzi.
Sto provando a farlo con le espressioni regolari perché penso sia l'unico modo di riuscirci.
Per ora sto cercando di prendere tutto il contenuto del <div class="dataBoxWrap">
Non prendo direttamente i dati perché di quei div possono essercene diversi all'interno della pagina, quindi poi dovrò ciclare su di essi.

Sto provando così

preg_match_all('/class="dataBoxWrap"(.*?)\/dataBoxWrap/',$content,$matches);
//$content contiene il codice della pagina letta

$print_r($matches); //stampa: Array ( [0] => Array ( ) [1] => Array ( ) )

Quindi la regex non trova alcuna corispondenza.

Quale è l'errore?

Alhazred
23-02-2012, 11:15
Il problema sembrano essere i ritorni a capo o comunque il fatto che il codice sia su più righe.

Ho provato ad applicare la regex alla stringa
<div class="dataBoxWrap">Pippo Pippo/dataBoxWrap

e Pippo Pippo viene catturato.

Ho aggiunto il modificatore per il "multilinea" m alla regex, ma continua a non funzionare.

Idee?

Alhazred
23-02-2012, 11:33
Ci sono riuscito così

$content = str_replace(array("\r\n", "\r", "\n", "\t"),'',$content);
preg_match_all('/"dataBoxWrap"(.*?)<!-- \/dataBoxWrap -->/',$content,$matches);