preg_grep su una stringa più grande
Domanda
Devo usare preg_reg su una stringa con contenuto da un file html.
$file = file_get_contents($path);
$html_array = explode(' ', $file);
Il problema è che l'array a volte appare così:
[77]=>
string(35) "<div>
</div>
<br>
{{testto}}
<br>"
Ho provato a inserire alcuni spazi bianchi lì ..: P Non funzionerà ..: / Più avanti farò un preg_grep in questo modo:
$childframes = preg_grep('!\{\{(\w+)\}\}!', $html_array);
$retur = array();
foreach($childframes as $v){
$v = trim($v);
$retur[] = substr($v, 2, -2);
}
return $retur;
Quindi l'idea è fondamentalmente di ottenere {{testto}}
in un array, ogni ricorrenza di {{sometext}}
in cui lo sottostringo solo in 'sometext '.
Grazie =)
Modifica
Per ripetere il problema: esplodere non funziona correttamente, quindi ho bisogno di regex, se possibile, invece di spazi bianchi .., e c'è un modo migliore per eseguire preg_grep su una stringa di grandi dimensioni?
Soluzione
Non c'è bisogno di esplodere, creare un array temporaneo, grep e rimuoverlo in seguito, solo una corrispondenza regexp:
$html = file_get_contents($path);
preg_match_all('#{{(.*?)}}#', $html, $matches);
$array_of_texts = $matches[1];
Altri suggerimenti
Non vuoi solo usare:
strip_tags($v)
prima in modo da rimuovere tutti i tag html, quindi il tuo codice otterrà correttamente il 'sometext'.