LibreOffice Writer/Trovare e sostituire: le espressioni regolari: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Gian BOT (discussione | contributi)
m code > source
Riga 17:
Aprendo il quadro di dialogo «Cerca e sostituisci» si fa clic in Altre opzioni e si spunta Espressioni regolari. Adesso, in Trova dobbiamo scrivere quello che sarà la nostra prima espressione regolare:
 
<codesource>
 
(([^[0-9]]*)*)
 
</codesource>
 
Dovremo vedere qualcosa di simili a quello presentato nella Figura 75.
Riga 39:
Per esempio il carattere ^ da sé serve soltanto per localizzare elementi all'inizio di un paragrafo. Infatti, scrivendo
 
<codesource>
 
^un
 
</codesource>
 
in «Trova» il testo «un» verrà selezionato soltanto se si trova all'inizio di un paragrafo e sarà ignorato in altre posizioni. Ma se adesso mettiamo la medesima espressione tra parentesi quadre
 
<codesource>
 
[^un]
 
</codesource>
 
questo significherà «un carattere diverso da u e da n»: se nel testo si trova la parola «uno» e utilizziamo l'espressione regolare [^un] in «Trova», lo strumento ignorerà l'«un» e si fermerà nella «o», in «utilità» ignorerà la «u» e si fermerà nella «t»… Le parentesi quadre, oltre a essere utili per creare «negazioni» come quella precedente servono pure per indicare un «range» di caratteri. Per esempio
 
<codesource>
 
[0-7]
 
</codesource>
 
indica qualsiasi numero dallo zero al sette.
Riga 65:
E qui l'espressione regolare con la quale si è aperto questo capitolo comincia ad avere un senso:
 
<codesource>
 
[^[0-9]]
 
</codesource>
 
rappresenta un carattere qualsiasi che non sia un numero.
Riga 83:
Può essere utilizzato come un carattere generico. Per esempio
 
<codesource>
 
m.s
 
</codesource>
 
cercherà per mas, más, mis… oppure mXs. Un'espressione equivalente al punto è
 
<codesource>
 
[:any:]
 
</codesource>
 
=== Il punto interrogativo ? ===
Riga 101:
Serve per trovare «zero o una volta» il carattere precedente. Per esempio
 
<codesource>
 
vizio?
 
</codesource>
 
Troverà vizio e vizi.
Riga 117:
Servono a indicare quante ripetizioni ci interessano. Per esempio
 
<codesource>
 
a{1,4}y!
 
</codesource>
 
cercherà un minimo di una e un massimo di quattro ripetizioni della a e pertanto troverà ay!, aay!, aaay!, aaaay! Scrivendo soltanto un numero cercherà esattamente quel numero di ripetizioni, per esempio a{3}y! Troverà soltanto aaay! Per ultimo l'espressione a{3,}y! troverà la parola con almeno tre a, ma senza limite massimo.
Riga 129:
Così come ^ cerca all'inizio, il carattere $ preceduto da qualche testo cercherà quel testo alla fine di un paragrafo. Il carattere $ da solo può infatti essere utilizzato per cercare l'interruzione paragrafo ma risulta importante notare che non è possibile cercare un testo alla fine di un paragrafo più l'interruzione paragrafo. Per esempio l'espressione
 
<codesource>
 
\.$
 
</codesource>
 
troverà un punto alla fine di un paragrafo ma non selezionerà l'interruzione di paragrafo in sé.
Riga 145:
Però questa barra può anche essere utilizzata per dire che dei caratteri normali hanno adesso un significato speciale: \b cerca nei «limiti» (boundaries, in inglese) di una parola. Per esempio
 
<codesource>
 
\bgius
 
</codesource>
 
troverà il «gius» di giusto, giusta, giustamente… ma lascerà passare quello di «aggiustare» mentre che
 
<codesource>
 
ora\b
 
</codesource>
 
troverà l'«ora» di mora, assapora… ma non quello di «orario».
Riga 173:
Utilizzata tra parentesi quadre serve per «scegliere» tra due opzioni. Per esempio
 
<codesource>
 
bar[r|c]a
 
</codesource>
 
troverà barra e barca, ma non baria. Può essere utilizzato più di una volta in espressioni del tipo [a|b|c].
Riga 183:
Se vogliamo cercare parole intere possiamo non utilizzare le parentesi quadre
 
<codesource>
 
primo|secondo|terzo
 
</codesource>
 
troverà le parole «primo», «secondo» o «terzo».
Riga 195:
Le parentesi tonde «raggruppano» espressioni. Il vantaggio principale è che le espressioni così raggruppate possono essere «richiamate » dopo. Vediamo un esempio. Supponiamo che vogliamo cercare un testo ripetuto (tipico errore tipografico che compare quando ci fermiamo a pensare a metà metà di una frase…) l'espressione regolare (più in giù ne vedremo una migliore)
 
<codesource>
 
(.+)\1
 
</codesource>
 
troverà qualsiasi gruppo di caratteri che si ripeta, per esempio due volte una parola o due volte uno spazio, perché il gruppo (.+) viene chiamato ancora con il \1.
Riga 207:
Per «pulire» questa ripetizione sarà sufficiente scrivere $1 in Sostituisci. E sì, Sostituisci funziona in modo diverso da Trova: il riferimento si fa con $ e non con \. Infatti, tranne per qualche eccezione molto particolare Sostituisci non accetta espressioni regolari. L'espressione precedente troverà anche due l consecutive, due r… insomma, che può risultare «pericolosa». Una espressione che da risultati perfetti per trovare parole duplicate è la seguente:
 
<codesource>
 
\b(\w+) +\1\b
 
</codesource>
 
{{riquadro|Importante: notare lo spazio tra il (\w+) e il +\1}}
Riga 233:
Per trovare paragrafi vuoti che contengano soltanto spazi ma non parole, caratteri o simboli possiamo scrivere
 
<codesource>
 
^([ ]*)$
 
</codesource>
 
(tra le parentesi quadre c'è uno spazio) in Trova. Per qualche motivo questa espressione non riesce a trovare il caso di «zero spazi», dove si deve utilizzare
 
<codesource>
 
^$
 
</codesource>
 
Per trovare numeri interi
 
<codesource>
 
\b[1-9][0-9]*\b
 
</codesource>
 
Se si vuole trovare un numero «con la virgola» del tipo 0,1234
 
<codesource>
 
\b[0-9]+,[0-9]*\b
 
</codesource>
 
E se dobbiamo trovare dei numeri che possano essere interi oppure decimali, con virgola o con punto come separatore decimale?
 
<codesource>
 
\b[0-9]+[,|\.]?[0-9]*\b
 
</codesource>
 
Vediamo adesso qualche esempio più difficile. Per trovare testo tra parentesi tondi:
 
<codesource>
 
\([^\(]*\)
 
</codesource>
 
La spiegazione di questa espressione è la seguente: cerca una parentesi di apertura, un numero arbitrario di caratteri che non siano una parentesi di apertura e infine un parentesi di chiusura.
Riga 283:
Tanto le parentesi tonde come quelle quadre sono caratteri speciali per le espressioni regolari ed è per questo che si deve utilizzare la barra inversa, ma se vogliamo trovare per esempio qualcosa circondata nelle «virgolette latine» possiamo semplicemente utilizzare
 
<codesource>
 
«[^«]*»
 
</codesource>
 
Bene, siamo già in ritmo? Perché adesso vengono delle cose veramente complesse e interessanti…
Riga 293:
Situazione: dobbiamo selezionare un testo che si trova prima di un altro, ma senza selezionare quest'ultimo. Risulta necessario utilizzare quello che nel gergo delle espressioni regolari si chiama Lookahead assertion e che si costruisce con un paio di parentesi tonde, un punto interrogativo e un segno uguale:
 
<codesource>
 
termine da selezionare(?=elemento che non vogliamo selezionare)
 
</codesource>
 
Esempio: dobbiamo selezionare qualsiasi testo immediatamente seguito da un punto, ma senza selezionare il punto, l'espressione sarebbe
 
<codesource>
 
\b\w+(?=\.)
 
</codesource>
 
Nuova situazione: prendiamo adesso la sfida di trovare qualcosa che venga dopo un elemento determinato, ma senza selezionare quell'elemento. La strategia viene chiamata Look-behind assertion la quale si costruisce in modo similare all'anteriore, ma aggiungendo in modo strategico con un segno di «minore che»:
 
<codesource>
 
(?<=elemento che non vogliamo selezionare) termine da selezionare
 
</codesource>
 
Esempio: cade nelle nostre mani un testo scritto da altre persone, possibilmente importato da altri formati, che ha più spazi dopo ogni punto, non solo uno, e vogliamo risolvere questo problema. L'espressione seguente sarebbe sufficiente
 
<codesource>
 
(?<=\.)[:space:]{2,}
 
</codesource>
 
Però cosa succede se questi spazi ripetuti si danno pure dopo un punto esclamativo o interrogativo? In questo caso l'espressione sarebbe
 
<codesource>
 
(?<=[\.\?\!])[:space:]{2,}
 
</codesource>
 
Altra sfida? Potremo cercare testo tra due virgolette ma senza selezionare le virgolette
 
<codesource>
 
(?<=«)[^»]+(?=»)
 
</codesource>
 
Un ultimo esempio: potremo utilizzare tutto questo per correggere la mancanza di uno spazio dopo un punto. Per esempio, se in un testo si tiene
 
<codesource>
 
Un periodo.Secondo periodo.Terzo periodo?Quarto. Il quinto è giusto.
 
</codesource>
 
E vogliamo selezionare soltanto i punti che non sono seguiti da uno spazio potremo utilizzare
 
<codesource>
 
(?<=\w)\.(?=[\w¿¡])
 
</codesource>
 
per poi sostituirle per un punto e uno spazio.