Salve
Ho la stringa $testo, nella quale vorrei sapere quante volte é presente la parola $parola.
Esiste una funzione apposta? Come posso fare?
ciauz
Adiumx
Salve
Ho la stringa $testo, nella quale vorrei sapere quante volte é presente la parola $parola.
Esiste una funzione apposta? Come posso fare?
ciauz
Adiumx
Non so se ti può essere utilie questo, in quanto non è estremamente preciso nell'individuare esattamente il termine da cercare:Ritorna il numero di occorrenze di $parola. Ma, come ti dicevo, se nella stringa $testo la parola da acercare fosse "pippo", e in $testo ad esempio hai pippolo pippone ecc..., substr_count ti troverebbe tutte le occorrenze di "pippo" senza distinguere tra pippo e pippone. E' come se recuperasse l'intera sequenza di caratteri a prescindere dal contesto in cui si trova il termine cercato.codice:echo substr_count($testo, $parola);
Puoi usare le esppressioni regolari.
Questa funzione l'ho scritta per trovare i match a partire da una certa posizione e per una certa lunghezza.
Guarda questo esempiocodice:function zz_ereg($pattern, $string, &$offset, $len=-1) { $len = ($len==-1?strlen($string)-$offset:$len); $substring = substr($string, $offset, $len); $result = ereg($pattern, $substring, $regs); if(!$result){ return false; } else{ $match = $regs[0]; $offset += strpos($substring, $match); return $match; } }
Mi rendo conto che non è molto efficiente...cmq funziona!codice:$string = "Questo è un testo di prova per trovare tutte le occorrenze della parola testo in un testo"; $pattern = "testo"; for($count=0, $offset=0; $match = zz_ereg($pattern, $string, $offset); $count++, $offset+=strlen($match)); echo "La parola 'testo' compare ".$count." volte";
Mi sono reso conto che l'esempio era triste perchè si ricadeva nel problema accennato da neida.
Un nuovo pattern risolve il problema
In questo modo occorre che il carattere prima e dopo testo non sia una lettera o un numero.codice:$string = "Questo è un testo di prova per trovare tutte le occorrenze della parola testo in un testo. La parola testona non viene conteggia"; $pattern = "[^a-zA-Z0-9]testo[^a-zA-Z0-9]"; for($count=0, $offset=0; $match = zz_ereg($pattern, $string, $offset); $count++, $offset+=strlen($match));
Ancora: se non ti interessa il case (maiuscolo/minuscolo) usa eregi invece di ereg
vi sconsiglio PESANTEMENTE di usare le ereg ... sono TREMENDAMENTE lente! oltre che meno flessibili rispetto alle preg
www.php.net/pcre
VM su SSD da 5$! https://www.digitalocean.com/?refcode=f6925c7f0ddb
ok, funziona. Comunque non mi serve tanto se ereg è tremendamente lenta NOn e ùna pagina gigantesca.... solo un semplice motore di ricerca
Grazie per gli aiuti.
Un utlima cosa, in una query sql, come faccio a dire di cercare una parola "tra gli spazi", cioè``de`lìmitata dagli spazi?
ciauz
Elio