Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [PHP] Espressioni Regolari e Simili

    Salve a tutti, il mio problema è questo.

    Dato un testo vorrei evidenziare al suo interno ogni occorrenza di una data parola.

    La prima soluzione che mi è venuta in mente era questa

    Codice PHP:
    $text=str_replace ($parola"<u>".$parola."</u>"$text); 
    In questo modo cercando ad esempio "ali" mi vengono prese in considerazioni anche parole come spaziali ovali e così via.

    Cercando in questo forum, ho scoperto che sarebbe meglio usare delle espressioni regolari.
    Così dopo essermi documentato un po' ho provato a scrivere questo codice.

    Codice PHP:
    $temp="vola sulle ali degli ovali, questa è un'altra prova,ali, ciao ali e ali";
    $nome="ali";
    $regexp="^".$nome."[^0-9A-Za-z]|[^0-9A-Za-z]".$nome."$|[^0-9A-Za-z]".$nome."[^0-9A-Za-z]";
    $temp=eregi_replace($regexp"<u>".$nome."</u>"$temp);
    echo 
    $temp
    A prima vista sembra funzionare, soltato che mi stampa a video il seguente risultato:

    vola sulleali degli ovali, questa è un'altra provaali ciaoalieali

    Eliminandomi il carattere antecedente e quello precedente all'occorrenza trovata.

    Qualcuno sa come ovviare al problema?

    ho anche sentito parlare della funzione preg_replace() che dovrebbe essere più veloce..

    Qualcuno mi spiega come funziona?

  2. #2
    Per il tuo problema basta aggiungere lo spazio direttamente nella funzione in questo modo:

    eregi_replace($regexp, " <u>".$nome."</u> ", $temp);

    Per preg_replace vedi sul sito di php! é la migliore fonte!

    preg_replace

  3. #3
    Alla fine ho trovato una soluzione che mi va quasi a genio, utilizzando preg_replace()

    Codice PHP:
    $temp="vola sulle Ali degli ovali, questa è un'altra prova,ali, ciao ali e ali";
    $nome="ali";
    $regexp="/^".$nome."\W|^".$nome."$|\W".$nome."$|\W".$nome."\W/i";
    $temp=preg_replace($regexp"<u>$0</u>"$temp);
    echo 
    $temp
    purtroppo resta sempre il problema che mi vengono presi in considerazione anche il carattere prima e quello dopo.

    Per mircov

    Se aggiungo uno spazio prima e uno dopo in automatico, commetterei un errore, in quanto in realtà quei caratteri potrebbero essere un qualsiasi altro simbolo, come ad esempio ? oppure ,

  4. #4
    Hai ragione. Allora non so che dirti! Mi dispiace! Ciao!

  5. #5

  6. #6
    nessuno sa come aiutarmi? Io non so più dove sbattere la testa

  7. #7
    Nessuno sa proprio come modificare questa espressione regolare per evitare di fargli sostituire anche il carattere prima e quello dopo?
    Codice PHP:
    $regexp="/^".$nome."W|^".$nome."$|W".$nome."$|W".$nome."W/i"
    $temp=preg_replace($regexp"<u>$0</u>"$temp); 

  8. #8

  9. #9
    Dopo altri mille tentativi ho scritto questo codice

    Codice PHP:
    <?
    $temp
    ="ALi vola sulle Ali degli ovali, questa è un'altra prova,ali, ciao ali e ali";
    echo 
    $temp."
    "
    ;
    $nome="ali";
    $regexp="/^".$nome."\W|^".$nome."$|\W".$nome."$|\W".$nome."\W/ie";
    $temp=preg_replace($regexp"substr('$0',0,1).'<u>'.substr('$0',1,strlen('$0')-2).'</u>'.substr('$0',strlen('$0')-1)"$temp);
    echo 
    $temp;
    ?>
    Solo che oltre ad essere un casino, funziona correttamente solo se la parola si trova all'interno della frase e non quando si trova come prima parola o come ultima

    Ormai sono disperato.. non so più cosa fare

  10. #10
    Altre ore e ore di ricerche e alla fine ho trovato la giusta espressione regolare..
    Per i più curiosi è questa..

    Codice PHP:
    preg_replace("/\b".$nome."\b/i""<u>$0</u>"$temp); 

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 © 2025 vBulletin Solutions, Inc. All rights reserved.