Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2001
    Messaggi
    170

    Estrarre parole (nomi) da stringa di testo

    Come da titolo dovrei estrarre delle parole da una stringa di testo
    Nello specifico in un testo come:
    @Pinco e @Pallino sono andati da @Sempronio

    dovrei riuscire a prendere:
    Pinco
    Pallino
    Sempronio

    e passarli in un ciclo per verificare che almeno uno di quei nomi corrisponda ad una variabile.

    Ho provato con

    Codice PHP:
    preg_match_all("/([@][a-zA-Z-0-9]+)/"$testo$nome);
    foreach (
    $nome[1] as $n){
     if (
    $n==$variabile) {        
    $testo preg_replace('/\@(.+?)/''<span class="evidenzia">$1</span> '$test);                
    } else {
    $testo preg_replace('/\@(.+?)/''$1'$testo);            
    }

    Oltre al fatto che sicuramente ho sbagliato l'espressione con preg_macht_all (ne ho provate un po' questa è solo l'ultima), sicuramente è sbagliata la funzione preg_replace messa in questo modo perchè poi mi "sostituirebbe" tutte parole precedute da una @ (quindi Pinco, Pallino e Sempronio) invece di sostituire solo quella nella variabile.

    Ma andando per per ordine come faccio innanzitutto a estrarre i nomi?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    ma tu vuoi sostituire l'occorrenza di $n nella stringa se è uguale a $variabile?

    in pseudocodice
    codice:
    $n = "pluto"
    $variabile = "pluto"
    $testo = "io sono pippo"
    
    if($n == $variabile) {
       sostituisci pluto a pippo in $testo 
       stampa "io sono pluto"
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2001
    Messaggi
    170
    Quote Originariamente inviata da clasku Visualizza il messaggio
    ma tu vuoi sostituire l'occorrenza di $n nella stringa se è uguale a $variabile?
    [/code]
    No.

    E aggiungo che in $testo potrebbe anche non esserci alcuna parola/nome preceduto dalla @ (chiocciola)

  4. #4
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    posteresti qualche esempio con testo di partenza e testo che vuoi ottenere?

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2001
    Messaggi
    170
    Testo di esempio
    Quote Originariamente inviata da Mary Angy Visualizza il messaggio
    un testo come:
    @Pinco e @Pallino sono andati da @Sempronio
    Risultato sul testo
    Quote Originariamente inviata da Mary Angy Visualizza il messaggio
    $testo = preg_replace('/\@(.+?)/', '<span class="evidenzia">$1</span> ', $testo);
    Quindi se la variabile fosse Pallino, il risultato sarebbe

    Pinco e <span class="evidenzia">Pallino</span> sono andati da Sempronio

    Ma il problema principale è questo
    preg_match_all("/([@][a-zA-Z-0-9]+)/", $testo, $nome);

    ovvero estrarre tutti le eventuali parole precedute dal simbolo @.

  6. #6
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    ma il pattern non potrebbe essere semplicemente "/(\@\w+)/"?

  7. #7
    Per prima cosa direi che ti conviene estrarre tutte le parole dalla stringa e metterle in un array usando
    Codice PHP:
     explode(" "tmp); 
    Poi scorri una per una le parole così ottenute scartando quelle che non iniziano con @

  8. #8
    Utente di HTML.it L'avatar di ttcc
    Registrato dal
    Dec 2008
    Messaggi
    489
    io ho provato così:

    Codice PHP:
    $testo="@Pinco e @Pallino sono andati da @Sempronio, @Caio e @Tizio";
    //preg_match_all("/([@][a-zA-Z-0-9]+)/", $testo, $nome);
    preg_match_all("/@[a-zA-Z]+/"$testo$nome);
    print_r($nome); 
    e ho un output tipo:

    Codice PHP:
    Array
    (
        [
    0] => Array
            (
                [
    0] => @Pinco
                
    [1] => @Pallino
                
    [2] => @Sempronio
                
    [3] => @Caio
                
    [4] => @Tizio
            
    )


    vuoi questo esito?

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2001
    Messaggi
    170
    Rieccomi, avevo abbandonato questo codice per fare altro, ora mi ritrovo così

    Codice PHP:

    $testo
    ="@Pinco e @Pallino sono andati da @Sempronio, @Caio e @Tizio. Ciao @Pinco";

    $nominativo "Pinco";

    if (
    preg_match_all("/\@(.+?) /"$testo$nome)) {        
    foreach (
    $nome[1] as $n){       
    if (
    $n==$nominativo) {          
    $msg preg_replace('/\@'.$n.' /''<span class="giallo">'.$n.'</span> '$msg);             
    }else {        
    $msg preg_replace('/\@/'''$msg); 
    }  
     }           

    Praticamente dovrebbe aggiungere alla variabile $nominativo la classe css, funziona solo SE la variabile $nominativo viene trovata per prima.

    Per capirci se $nominativo è "Pinco", e $testo è "Ciao @Pinco e @Pallino", funziona.
    Se $nominativo fosse "Pallino", non funzionerebbe perchè "si ferma" a @Pinco.

    In pratica non mi scorre tutto l'array di preg_match_all

    Non so se mi sono spiegata, spero di si.

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2001
    Messaggi
    170
    Risolto, ho tolto l' else

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.