Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    268

    espressioni regolari - quesito 2 (... che professionale che sono!)

    ho la mia variabile:

    $a="OGGI è una bella giornata (25° di temperatura), mi PIACEREBBE ANDARE a fare un giro in bicicletta";

    Voglio ottenere:

    $a="-C-OGGI è una bella giornata (25° di temperatura), mi -C-PIACEREBBE -C-ANDARE a fare un giro in bicicletta";

    ovvero aggiungere "-C-" all'inizio di ogni parola scritta in maiuscolo (è un esempio, quindi non chiedetevi a cosa serve mettere "-C-")
    PS Non è detto che la parola in maiuscolo sia sempre seguita da uno spazio

    Con questa espressione regolare ottengo una cosa carina, ma giustamente, mi mangia la prima lettera e uno spazio

    espressione
    $a =~ s/[A-Z](.+?)[^A-Z]/-C-$1/g;

    risultato
    $a="-C-GGIè una bella giornata (25° di temperatura), mi -C-IACEREBBE-C-NDAREa fare un giro in bicicletta"

    La soluzione più lunga sarebbe quella di
    - scorporare la frase carattere x carattere
    - fare un ciclo al cui interno metto un confronto con il carattere precedente
    - se ho, fra carattere precedente e carattere letto, un'alternanza (simbolo / lettera minuscola / numero),lettera maiuscola allora aggiungo -C- all'inizio del carattere letto
    ... bla bla bla ... troppo lungo!

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    s/([A-Z]+?)[^A-Z]/-C-$1/g;

    Ho spostato la parentesi in modo da includere il primo carattere ed ho fatto in modo che la "parola" si chiuda con qualsiasi carattere diverso da maiuscola.
    Prova a vedere se ti va bene.

    Forse si puo` anche togliere il [^A-Z] e lasciare semplicemente:
    s/([A-Z]+?)/-C-$1/g;
    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
    May 2002
    Messaggi
    268
    la seconda soluzione non funziona, mentre la prima è ottima. Mi permetto di correggerla quindi così:

    s/([A-Z]+?[^A-Z])/-C-$1/g;

    per non perdermi il carattere subito successivo.
    Prima o poi mi entreranno nel cervello 'ste espressioni regolari!

    Grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Originariamente inviato da MARTEDI Prima o poi mi entreranno nel cervello 'ste espressioni regolari!
    E` un processo lungo, ma va a buon fine (intendo l'azione di "entrare nel cervello").
    Le RE sono una potenza dell'informatica, ma proprio per questo sono un po' dure da digerire. Anch'io ho ancora le mie belle difficolta` (come si evince dai consigli che do), e sono alcuni anni che le uso.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    ritengo che la più semplice sia:

    s/\b([A-Z]+)\b/-C-$1/g;

    \b rappresenta qualunque possibile delimitazione di parola, cioè spazio, virgola, accapo, ecc.
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    268
    funziona perfettamente.
    Ho provato a dare una sbirciata alle espressioni regolari in perl qui:

    programmazione espressioni-regolari

    mi sembra di capire che vi sono altri simboli/caratteri oltre a quelli indicati ... sbaglio?

    Scusate le incertezze ma non è più così semplice trovare libri dedicati a Perl (soprattutto in Italiano!). Un esempio: il libro di Larry Wall è introvabile, pare non esista più l'editore!

  7. #7
    qui puoi trovare molto materiale:

    http://pod2it.sourceforge.net/pods/
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

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.