Mi sono reso conto che l'esempio era triste perchè si ricadeva nel problema accennato da neida.
Un nuovo pattern risolve il problema
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));
In questo modo occorre che il carattere prima e dopo testo non sia una lettera o un numero.