
Originariamente inviata da
ZioLuffio
Quello che Alhazred suggerisce è che possano esserci degli spazi prima e/o dopo le parole e che quindi possano non essere uguali.
Secondo me invece è l'espressione regolare che non funziona.
codice:
(/national/(.*?)/)
In
preg_match e
preg_match_all, il pattern deve essere delimitato da / mentre all'inizio e alla fine hai messo ( ).
Inoltre, (.*?) non ha alcun senso: per come ha scritto tu "può esserci zero o più caratteri qualunque, e ciò può esserci o non esserci". Solitamente basta scrivere (.*), però spesso non funziona perché considera "carattere qualsiasi" anche la / stessa, quindi va esclusa: ([^\/]*)
Altra cosa, la / è un carattere speciale, quindi devi fare l'escape per indicare che è una / e non un delimitatore: in questo caso, i caratteri speciali devono essere preceduti da \
Quindi il pattern dovrebbe essere:
codice:
/national\/([^\/]*)\//
Aggiungo che potresti scriverlo un po' meglio e corto il codice (questo è un suggerimento):
Codice PHP:
<?php
$page='http://www.futbol24.com/';
$lines = file($page);
$parole=array();
foreach ($lines as $testo) {
echo 'testo'.$testo;
if(preg_match_all('/national\/([^\/]*)\//', $testo, $ris)){
$parole = array_merge($parole,$ris[1]);
}
}
echo 'Prima di array_unique:<br/>';
print_r($parole);
$result=array_unique($parole);
echo 'Dopo array_unique:<br/>';
print_r($result);
(ho tralasciato i commenti)
Se provassi la mia soluzione e non dovesse funzionare, ti invito a postare i risultati dei
print_r