Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    28

    aiuto preg_replace e Regular Expressions

    Salve a tutti,

    spero tra di voi ci sia qualche esperto di Regular Expressions
    io non ne vengo a capo

    dato un testo in input vorrei fare in modo di sostituire la punteggiatura con uno spazio, ma non sempre.

    esempio in cui sostituire
    Sono andato al mare. Domani vado in montagna.

    esempio in cui non sostituire
    12.03.2011

    quindi magari eliminare la punteggiatura solo quando è seguita da uno spazio.

    ciao e grazie per l'aiuto

  2. #2
    ciao,
    potresti cominciare con qualcosa di simile:
    codice:
    (\.|,|;|:)\s+
    questa regex cerca tutte le occorrenze di . , ; : seguite da uno spazio. Non so se è sufficiente per quello che vuoi ottenere ma è un inizio.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    28
    Grazie,

    funziona ed ho aggiunto anche ! e ?

    invece secondo te come mai questa non mi funziona (non mi da errore ma non leva i ritorni a capo ad esempio).

    codice:
    $tmp = str_replace(array("\r\n", "\r", "\n", "\t"), ' ', $string);

  4. #4
    dovrei sapere cosa contiene la variabile $string.... probabilmente non contiene i caratteri di ritornoa capo e tab. Occhio che il ritorno a capo in html è il tag
    . Controlla il contenuto della variabile $string.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    28
    HUMMM

    credo di avere problemi a causa del

    mysql_real_escape_string()

    che applico all'input che l'utente digita in una textarea

    ad esempio:

    aaaaaaa.
    bbbb bbbb bbbbb.
    cccc cccc cccc cccccc.

    e solo dopo provo a togliere i carriage return

    faccio delle prove....

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    28
    Si era
    mysql_real_escape_string()

    che dava problemi, alla fine per quello che mi serviva ho fatto in questo modo


    codice:
    	
    //valorizzo la variabile con l'input e aggiungo uno spazio 	
    $ins_string = $_POST["string"]." ";
    
    //tolgo i ritorni a capo i tab e le nuove linee 	
    $ins_string = str_replace(array("\n\r", "\r\n", "\r", "\n", "\t"), " ", $ins_string);
    
    //tolgo la punteggiatura se c'e' uno spazio subito dopo il carattere 	
    $reg = "/[\.|,|;|:|?|!]\s+/"; 	$ins_string = preg_replace ($reg, ' ', $ins_string);
    
    
    $ins_string = mysql_real_escape_string($ins_string); 	 	
    $arr_tmp = explode(" ", $ins_string);
    
    //tolgo le parole ripetute 	
    $arr_tmp = array_unique($arr_tmp);
    grazie per l'aiuto

  7. #7
    Ma perche' sono tutti cosi' allergici alle regular expressions? Capisco magari roba tipo lookahead e pattern ricorsivi, ma un programmatore che non conosca almeno LE BASI delle regexp dovrebbe farsi un serio esame di coscienza.

    codice:
    $reg = "/[\.|,|;|:|?|!]\s+/"
    Le quadre indicano una character class cioe' una serie di caratteri da testare in alternativa, perche' mettere il pipe? Il pipe si usa per l'alternanza di gruppi, non per i singoli caratteri. In questo caso non solo non serve come operatore di alternanza, ma e' proprio un errore perche' non essendo un carattere speciale (all'interno delle quadre) il pattern cerca proprio un carattere "|". Inoltre anche il punto NON E' un carattere speciale all'interno di una character class, quindi non va preceduto da un backslash.

    Versione corretta del pattern:
    codice:
    $reg = '/[.,;:?!]\s+/';

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    28
    Io sono allergico di sicuro

    adesso sto usando

    Codice PHP:
    $string "aaaaa ¿€™±©®'.,;:?!\"£$[]<>%&|^/()*+-_{}#@ç°§ BBB";
    $stringpreg_replace("/\W/"""$string); 
    problemi:
    1) non mi toglie ç e _
    2) purtroppo toglie anche gli spazi

    sto facendo dei tentativi ma per adesso non ho risolto, sono sicuro che k.b mi picchierà.

    ciao
    Andrea

    EDIT:
    Mi rispondo da solo, ho risolto così (in rosso le modifiche)

    codice:
    $string = "aaaaa ¿€™±©®'.,;:?!\"£$[]<>%&|^/()*+-_{}#@ç°§ BBB";
    $string= preg_replace"/[\W]/", " ", $string);

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    28
    Se volessi che
    codice:
    $string= preg_replace"/[\W_ç]/", " ", $string);
    lasciasse passare il simbolo di percentuale ??


    Edit:
    scusate mi aririspondo da solo, spero solo possa essere utile a qualcuno,
    però leva anche le lettere accentate

    codice:
    $string = preg_replace("#([^a-z0-9%])#i", " ", $string);

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.