Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    74

    Espressioni Regolari - Sostituzioni

    Devo scrivere un pattern che rimuova il carattere "," se questo si trova all'inizio e/o alla fine della stringa.
    Ho scritto questa espressione:

    Codice PHP:
    #!/usr/bin/perl
    $string ",pippo,pluto,paperino,";
    $string =~ s/^(,)(.*)(,)$/$2/;
    print 
    "\n\n".$string."\n\n"
    Funziona correttamente ma solo se effettivamente è presente la virgola, nel caso in cui la virgola non fosse presente al primo carattere l'espressione non funziona più, provare per credere

    Codice PHP:
    #!/usr/bin/perl
    $string "pippo,pluto,paperino,";
    $string =~ s/^(,)(.*)(,)$/$2/;
    print 
    "\n\n".$string."\n\n"
    Qualcuno sa spiegarmi il motivo?

    grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Se non trova la virgola al primo posto, tutta la RE non e` verificata.

    Io userei una RE diversa:
    s/^\,*(.*)\,*$/$1/;
    (o eventualmente con i ? al posto degli *)
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    74
    Non funziona ne così:

    s/^\,*(.*)\,*$/$1/;

    ne così

    s/^\,?(.*)\,?$/$1/;

    Puoi spiegarmi per quale ragione metti \ davanti alla virgola? Non si tratta di un carattere speciale. O sbaglio?

    Ho provato anche questa togliendo \ ma niente!

    s/^,?(.*),?$/$1/;



  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Nel dubbio metto la backslash; non dovrebbe dare problemi per i caratteri non alfabetici.

    Hai verificato se non funziona solo se la stringa non inizia con , ? O con combinazioni strane di virgole all'inizio e alla fine?
    Ma il tutto mi sembra strano. Non c'e` qualche errore di sintassi? (magari in una riga sopra).
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    74
    Alla fine son tre righe di codice, eccole, ho tolto anche le virgole e ho messo due X.

    Codice PHP:
    #!/usr/bin/perl
    $string =   "Xpippo,pluto,paperinoX";
    $string =~  s/^X?(.*)X?$/$1/;
    print 
    "\n\n".$string."\n\n"
    Non capisco proprio perché non funziona.

    Ecco l'output del codice sopra:

    pippo,pluto,paperinoX

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Credo sia il problema della "greedyness" delle RE (vedi il man perlre - cerca "greedy").
    Sparisce se usi:
    s/^X?(.*?)X?$/$1/
    Pero` poi si ferma alla prima X interna che trova.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    74
    Originariamente inviato da Mich_
    Credo sia il problema della "greedyness" delle RE (vedi il man perlre - cerca "greedy").
    Sparisce se usi:
    s/^X?(.*?)X?$/$1/
    Pero` poi si ferma alla prima X interna che trova.
    Hai ragione, sta proprio lì il problema.
    E funziona anche con X interne perché il pattern termina con il $.



    Grazie!

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Originariamente inviato da trucall
    Hai ragione, sta proprio lì il problema.
    E funziona anche con X interne perché il pattern termina con il $.
    Ogni tanto si hanno soddisfazioni anche a dare risposte di cui non si e` completamente sicuri ...
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

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.