Forse questo sarà un post lungo, non lo so. Comunque preparatevi.
Sono qui, siore e siori, a presentare un prodotto che non fa il cafè siori, non rade i peli siore, non aspira e non respira; tenga, lo prenda. Lo tocchi. Le piace? E non ha ancora visto niente!
Salve, per la serie "la grammatica questa sconosciuta", oggi ci occuperemo di quelle utenze un po' su con l'età, che ormai la sintassi la dovrebbero già aver imparata da mo e invece no e che, nonostante questo, desiderano tanto, ma proprio tanto, scrivere sur blogghe (o da qualsiasi altra parte).
L'utenza in questione oltre alle normali difficoltà tecniche: accedere al blog, selezionare nuovo post e pubblicare il post, è solito produrre testi la cui punteggiatura rasenta l'assurdo. Testi chilometrici senza alcuno spazio dopo la punteggiatura. Non parlo di utilizzo a sproposito: qui saremmo già oltre, no, parlo proprio della regola fondamentale: dopo un elemento di punteggiatura occorre uno spazio.
Cosa fare, quindi, quando tra le mani ci troviamo un testo siffatto? Lasciarlo così sembrerebbe l'unica soluzione possibile. Chiedere gentilmente al nostro scordarello di ricordasi dello spazietto, magari facendo riferimonto a quelche pena corporale, potrebbe tornare utile. Oppure, nel caso che possa succedere di avere più utenti, sconosciuti, ai quali non si possa dire: "per favore, che per caso potresti ricordarti lo spazio dopo la punteggiatura?" ecco che ci viene in soccorso la Regular Expression.
Cos'è una regular expression? E' una stringa che serve a rappresentare un insieme di stringhe (sono usate per lo più per la ricerca e la sostituzione di stringhe).
Facciamo un esempio: 'cane' e 'cene' sono due parole, due stringhe appunto, che appartengono all'insieme di stringhe definite dalla seguente espressione regolare:
c[a|e]ne
le parentesi quadre determinano un set di caratteri e il simbolo di barra verticale definisce una possibile scelta tra la prima e la seconda lettera da essa separate (mi pare che la barra si possa omettere).
c[a-z]ne invece definisce l'insieme di stringhe che hanno come prima lettera 'c', come seconda lettera una compresa tra la lettera 'a' e la lettera 'z', seguita da 'n' ed 'e'.
Così faranno parte della regex c[a-z]ne le stringhe:
cane
cbne
ccne
cdne e così via.
Ci sono altre regole che si possono usare per costruire insiemi di stringhe. Ad esempio una espresione regolare seguita da un * vuol dire che quella espressione può ripetersi da 0 a n volte.
per c[a]*ne abbiamo
cne
cane
caane
caaane e così via.
Una espressione regolare seguita da + indica che qualla espressione può ripetersi da 1 a n volte
per c[a]+ne abbiamo
cane
caane
caaane e così via
Bene. Che ce famo mo co tutta sta robbba?! Esistono editor di testo che permettono di effettuare ricerche nel testo utilizzando espressioni regolari. Questi editor permettono anche di effettuare sostituzioni di testo con espressioni regolari. Uno degli editor più famosi ad avere questa caratteristiche è Notepad++.
Prima di proseguire, occorre sapere che è possibile raggruppare parti di stringa attraverso le parentesi tonde in questo modo
(cane)(gatto)
questa espressione regolare sta per la sola stringa canegatto (tuttoattaccato, ma volendo avremmo potutto mettere uno spazio in mezzo, ok mettiamocelo)
(cane) (gatto) sta per cane gatto
La prima parentesi indica il gruppo numero 1 e la seconda il gruppo numero 2.
Cioè un altro modo per scrivere "cane gatto" avendo definito l'espressione regolare
(cane) (gatto)
sarebbe questa
\1 \2
Quindi in Notepad++ se volessimo cercare la stringa 'cane gatto' per sostiuirla con 'gatto cane' potremmo fare così
Premendo Alt+h faremmo comparire la finestra della funzione 'sostituisci'
nel campo 'Trova' inseriremo (cane) (gatto)
e nel campo 'Sostituisci con' metteremo \2 \1
Applicando a tutto il testo questa sostituzione ogni occorrenza di 'cane gatto' verrà sostituita con 'gatto cane'. Messa così non sembra una cosa tanto utile, visto che la stessa cosa poteva essere fatta senza regular expressions. Ma consideriamo il caso della punteggiatura: se per caso ci troviamo di fronte ad un testo che dopo la punteggiatura non ha lo spazio come procediamo?
Ad esempio vogliamo che 'cane.Gatto' diventi 'cane. Gatto', vogliamo anche che 'cane,gatto' diventi 'cane, gatto' ecc.. Ma non vogliamo che 'cane...gatto' diventi 'cane. . . gatto'. E neanche che una stringa corretta come 'cane, gatto' diventi 'cane, gatto' (con due spazi). Bene, con le espressioni regolari possiamo fare questo tipo di sostituzione in una botta sola.
Procediamo passo passo per capire.
([a-z]),([a-z]) nel campo 'Trova' e
\1, \2 nel campo 'Sostituisci con' ci inserirebbe lo spazio dopo ogni virgola preceduta da una lettera minuscola e seguita da una lettera minuscola. E questo ci piace perchè tiene fuori i casi già corretti.
Se volessimo fare in una sola botta anche i punti ci basterebbe aggiungere un nuovo gruppo nel quale definiamo tutta la punteggiatura che ci interessa
T: ([A-Za-z0-9'])([\.,])([A-Za-z0-9'])
S: \1\2 \3
Il punto deve essere preceduto da \ perchè nelle regular expressions è un carattere speciale che indica ogni singolo carattere. Quindi per chidere proprio il punto dobbiamo scrivere \.
Volendo poi applicare la regola di inserimento dello spazio a tutti i simboli di interpunzione allora utilizzeremo
T: ([A-Za-z0-9'])([\.,;!?])([A-Za-z0-9'])
S: \1\2 \3
In quest'ultimo esempio quindi un punto preceduto da una lettera Maiuscola, minuscola, un numero oppure un apice seguito da un carattere con le stesse caratteristiche sarebbe sostituito da un punto seguito da uno spazio. Se volessimo comprendere tra i caratteri che precedono e seguono il punto anche caratteri speciali come le parentesi quadre e tonde sarebbe sufficiente aggiungerle al primo e al terzo gruppo facendole precedere da \
T: ([A-Za-z0-9'\]\)])([\.,;!?])([A-Za-z0-9'\[\(])
S: \1\2 \3
Bene, anche per questa sera abbiamo finito. Grazie per essere stati con noi. Buonanotte