Questo documento sfrutta i fogli di stile (CSS); senza il supporto dei fogli di stile, benché il testo sia comunque visualizzabile, non saranno visibili ne le formattazioni ne la struttura della pagina.

Sommario   Precedente

Introduzione alle espressioni regolari

BRE & ERE

  1. Basic Regular Expression (BRE) e Extended Regular Expression (ERE)
    1. Lo standard POSIX
    2. Ulteriori caratteri di ripetizione: + e ?
    3. Da \{n\}, \{n,\}, \{n,m\} A {n}, {n,}, {n,m}
    4. Da \(\) A ()
    5. Ricerca Alternativa: il metacarattere |

Lo standard POSIX

I metacaratteri trattati nelle precedenti sezioni sono parte dello standard POSIX delle espressioni regolari di base o BRE. Successivamente tale standard è stato ampliato con altri metacaratteri, dando vita alle cosiddette espressioni regolari estese o ERE.

Le cose, in realtà, sono più complicate di come sembrano, in quanto gli standard BRE ed ERE sono stati ampliati nell'ambito dei programmi sviluppati dal progetto GNU, per cui abbiamo uno standard BRE del progetto GNU e uno standard ERE del progetto GNU, entrambi più estesi rispetto ai rispettivi standard POSIX.

Mentre è certo che una espressione regolare secondo lo standard POSIX può essere capita da un programma che supporta lo standard GNU, del contrario non si è assolutamente sicuri.
I metacaratteri che vedremo successivamente sono implementati nei motori regexp che supportano ERE secondo lo standard POSIX.

Ulteriori metacaratteri di ripetizione: + e ?

Il metacarattere + fa si che l'elemento di base che lo precede deve esistere almeno una volta, ma può essere ripetuto in sequenza anche per più volte.

Esempio: Utilizzare il metacarattere +
[1-9]+[a-z]

Il metacarattere + in realtà non determina un vero e proprio potenziamento delle BRE, in quanto lo stesso effetto poteva essere ottenuto con il seguente costrutto BRE: \{1,\}

Il metacarattere ? fa si che l'elemento di base che lo precede possa esistere o possa non esistere, ma se esiste deve esistere non più di una volta.

Esempio: Utilizzare il metacarattere ?
[1-9][a-z]?

Il metacarattere ? in realtà non determina un vero e proprio potenziamento delle BRE, in quanto lo stesso effetto poteva essere ottenuto con il seguente costrutto BRE: \{0,1\}

DA \{n\}, \{n,\}, \{n,m\} A {n}, {n,}, {n,m}

Come si può vedere è cambiata la sintassi dei metacaratteri \{n\}, \{n,\}, \{n,m\}, che perdono la barra inversa posta prima delle parentesi graffe di apertura e chiusura, diventando quindi {n}, {n,}, {n,m}. Il loro significato rimane immutato; si richiama quanto già detto in: La ripetizione delle corrispondenze.

Nelle espressioni regolari estese le parentesi graffe corrispondono a se stesse se sono precedute dalla barra inversa \.

Da \(\) a ()

Anche in questo caso è cambiata la sintassi del metacarattere di raggruppamento \(\), che perde la barra inversa prima delle parentesi tonde di apertura e chiusura, diventando (). Il significato del metacarattere rimane immutato; si richiama quanto già detto in: il metacarattere di raggruppamento

Nelle espressioni regolari estese le parentesi tonde corrispondono a se stesse se sono precedute dalla barra inversa \.

Ricerca alternativa: il metacarattere |

Il metacarattere | pone una alternativa fra due o più sottoespressioni regolari, comunque queste siano formate; è sufficiente che una sola delle sottoespressioni regolari realizzi una corrispondenza affinchè tutto il costrutto delle alternative abbia esito positivo.

Affermare che è sufficiente che una solo delle sottoespressioni regolari realizzi la corrispondenza, vuol dire che tale corrispondenza deve risultare o per una sola di esse, o per entrambe.

Esempio: Alternativa fra sottoespressioni non raggruppate
c|bas{1,2}[ae]

l'alternativa è sempre posta fra la sottoespressione che sta a sinistra di | e la sottoespressione che sta a destra di |, quindi il carattere semplice c non è posto in alternativa con il solo carattere semplice b, ma piuttosto con l'intera sottoespressione regolare che sta dopo il metacarattere |, cioè con bas{1,2}[ae].

a+|b+|c+[d-z]

In questo caso le sottoespressioni regolari sono tre a+, b+, c+[d-z], ciascuna posta in alternativa all'altra.

Per controllare al meglio le sottoespressioni regolari da porre in alternativa è necessario raggrupparle.

Consideriamo il pattern dell'esempio precedente: a+|b+|c+[d-z], se l'alternativa vuol essere posta solo fra le sequenze a+, b+ e c+ è necessario far si che le tre sottoespressioni siano autonome da ogni altra sottoespressione.
A tal fine ci viene in aiuto il metacarattere composto (): racchiudendo le tre sottoespressioni in alternativa fra parentesi (a+|b+|c+), le si rendono autonome dalle restanti sottoespressioni che eventualmente la precedono o la seguono.

Esempio: Alternativa di sottoespressioni raggruppate
(a+|b+|c+)[d-z]+

In questo caso l'alternativa è posta fra a+, b+ e c+, mentre la sottoespressione [d-z]+ è fuori dall'alternativa e quindi essa deve necessariamente esistere dopo l'ultima sequenza che corrisponda ad una delle alternative.