Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    28

    Problema con espressione regolare

    Ciao a tutti.
    Ho un problema con una espressione regolare che non riesco a creare completamente funzionante come vorrei.

    Devo trovare quante occorrenze di una parola o di una stringa ci sono all'interno di una stringa, in maniera case insensitive.

    Ad esempio, se ho:

    codice:
    $stringa = "Ciao mamma guarda come mi diverto, sai MaMMa?";
    $parola = "mamma";
    devo ottenere 2, e questo anche per le sottostringhe, ad esempio risultato 1 per "ciao mamma".

    Mi aiutate per favore?

    Grazie mille!
    Ciao.

  2. #2
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    potrebbe essere

    Codice PHP:
    <pre>
    <?php
    $str
    ="testa";
    $context="il gruppo contesta, e io sono in testa!il popolo testardo chiede il testamento. ma mi fa male la TeSta";


    $str=preg_quote($str);
    preg_match_all('/([^a-z0-9]|^)('.$str.')([^a-z0-9]|$)/i',$context,$results);
    print_r($results);

    ?>
    per sapere quante volte quella parola è stata trovata nel testo, fai

    Codice PHP:
    $quante_volte=count($results[2]); 
    a me funziona... poi magare qualche persona più brava di me trova sicuramente una regexp migliore
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  3. #3

    Re: Problema con espressione regolare

    Originariamente inviato da decibel
    Devo trovare quante occorrenze di una parola o di una stringa ci sono all'interno di una stringa, in maniera case insensitive.
    http://php.net/substr_count

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    28

    Re: Re: Problema con espressione regolare

    Originariamente inviato da k.b
    http://php.net/substr_count
    substr_count non va bene perchè non devo cercare sottostringhe, ma parole intere.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    28
    Originariamente inviato da dottwatson
    a me funziona... poi magare qualche persona più brava di me trova sicuramente una regexp migliore
    Grazie per il consiglio!
    Leggendo la tua espressione regolare la parola viene trovata solo se una parte di parola e non una parola intera, o sbaglio?
    Per fare quello che serve a me (ossia trovare una parola solo se è una parola intera) potrebbe bastare controllare che sia preceduta da uno spazio e seguita da uno spazio o da un segno di punteggiatura, giusto?

    Grazie ancora per la risposta!

  6. #6
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    no, ti escluderebbe le parole a fine e inizio stringa, perchè non hanno nulla o davanti o dietro
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  7. #7
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    te la spiego meglio, perchè nel post precedente sono stato un pò scarno

    Codice PHP:
    <pre>
    <?php
    $str
    ="testa";
    $context="testa la bomba e il gruppo contesta, e io sono in testa!il popolo testardo chiede il testamento. ma mi fa male la TeSta";

    $str=preg_quote($str);
    preg_match_all('/
    ([^a-z0-9]|^)       #preceduta da qualsiasi cosa tranne caratteri e numeri OPPURE all inizo
    ('
    .$str.')          #la tua stringa
    ([^a-z0-9]|$)       #seguita da qualsiasi cosa tranne caratteri e numeri OPPURE alla fine
    /ix'
    ,$context,$results);
    print_r($results);

    /*
    i modificatori:
    i = insensitive
    x = mi ha permesso di scrivere i commenti preceduti dal # e formattare il pattern per leggerlo meglio 
    */

    ?>
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  8. #8

    Re: Re: Re: Problema con espressione regolare

    Originariamente inviato da decibel
    substr_count non va bene perchè non devo cercare sottostringhe, ma parole intere.
    Non e' quello che avevi chiesto

    Comunque usa questo pattern per la regexp:
    codice:
    /\b$parola\b/
    I due \b sono gli word boundaries

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.