Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di adiumx
    Registrato dal
    Jan 2005
    residenza
    Zurigo
    Messaggi
    353

    Trovareil numero di occorrenze di una parola in una stringa

    Salve
    Ho la stringa $testo, nella quale vorrei sapere quante volte é presente la parola $parola.
    Esiste una funzione apposta? Come posso fare?
    ciauz
    Adiumx

  2. #2
    Utente di HTML.it L'avatar di neida
    Registrato dal
    Feb 2005
    Messaggi
    1,478
    Non so se ti può essere utilie questo, in quanto non è estremamente preciso nell'individuare esattamente il termine da cercare:
    codice:
    echo substr_count($testo, $parola);
    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.

  3. #3
    Utente di HTML.it L'avatar di JHammer
    Registrato dal
    Sep 2004
    Messaggi
    754
    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.

    codice:
    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;      
      }
    }
    Guarda questo esempio


    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 rendo conto che non è molto efficiente...cmq funziona!

  4. #4
    Utente di HTML.it L'avatar di JHammer
    Registrato dal
    Sep 2004
    Messaggi
    754
    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.

  5. #5
    Utente di HTML.it L'avatar di JHammer
    Registrato dal
    Sep 2004
    Messaggi
    754
    Ancora: se non ti interessa il case (maiuscolo/minuscolo) usa eregi invece di ereg

  6. #6
    vi sconsiglio PESANTEMENTE di usare le ereg ... sono TREMENDAMENTE lente! oltre che meno flessibili rispetto alle preg

    www.php.net/pcre

  7. #7
    Utente di HTML.it L'avatar di adiumx
    Registrato dal
    Jan 2005
    residenza
    Zurigo
    Messaggi
    353
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.