Successivo: , Su: regexp Perl   [Contenuti][Indice]


B.1 Barra inversa

Ci sono alcune differenze nella gestione delle sequenze protette in modalità Perl.

Prima di tutto non ci sono sequenze \o e \d. Valori ASCII per i caratteri possono essere specificati in ottale con una sequenza \xxx, dove xxx è una sequenza lunga fino a tre cifre ottali. Se la prima cifra è uno zero, il trattamento della sequenza è diretto; si noti solo che se il carattere che segue la cifra protetta è esso stesso una cifra ottale, occorre fornire tre cifre ottali per xxx. Per esempio, \07 è un carattere BEL [campanello] e non una sequenza composta da un NUL e dal carattere letterale 7 (Una tale sequenza è invece rappresentata da \0007).

La gestione di una barra inversa seguita da una cifra che non sia 0 è complicata. All’esterno di una classe di caratteri, sed la tratta, assieme con eventuali altre cifre seguenti, come un numero decimale. Se il numero è minore di 10, o se ci sono state almeno altrettante precedenti parentesi aperte di cattura13 nell’espressione, l’intera sequenza è considerata un riferimento all’indietro. Una descrizione di come ciò funzioni è data più avanti, dopo la discussione delle sotto-espressioni regolari fra parentesi.

All’interno di una classe di caratteri, o se il numero decimale è superiore a 9 e non ci sono state altrettante sotto-espressioni di cattura, sed ri-legge fino a tre cifre ottali dopo la barra inversa, e genera un singolo byte dagli 8 bit meno significativi del valore. Ogni cifra ulteriore è considerata a parte. Per esempio:

\040  un altro modo per scrivere uno spazio
\40   come sopra, ammesso che ci siano meno di 40
      precedenti sotto-espressioni di cattura
\7    è sempre un riferimento all’indietro
\011  è sempre un carattere di tabulazione (tab)
\11   un riferimento all’indietro, o un altro modo di scrivere un tab
\0113 un tab seguito dal carattere ‘3
\113  il carattere con codice ottale 113 (K
      al massimo possono esserci 99 riferimenti all’indietro)
\377  un byte con tutti i bit a 1 (ASCII 255)
\81   o un riferimento all’indietro o uno zero binario
      seguito da due caratteri ‘81

Si noti che valori ottali da 100 in su non devono essere preceduti da uno zero, perché non vengono mai lette più di tre cifre ottali. Si noti che questo si applica solo alle espressioni alla sinistra (LHS); non è ancora possibile specificare più di 9 riferimenti all’indietro alla destra (RHS) del comando s.

Tutte le sequenze che definiscono il valore di un singolo byte possono essere usate sia all’interno che all’esterno di una classe di caratteri. Inoltre, all’interno di una classe di caratteri la sequenza \b è interpretata come il carattere di cancellazione all’indietro [backspace] (hex 08). All’esterno di una classe di caratteri ha un significato differente (vedere sotto).

Inoltre, ci sono quattro ulteriori sequenze di protezione che specificano classi generiche di caratteri (come fanno \w e \W):

\d

Corrisponde a ogni cifra decimale

\D

Corrisponde a ogni carattere che non sia una cifra decimale

In modalità Perl, queste sequenze di tipi di caratteri possono comparire sia all’interno che all’esterno di una classe di caratteri. Invece, in modalità POSIX tali sequenze, (come pure \w e \W) sono considerati come due caratteri letterali (una barra inversa e una lettera) racchiuse fra parentesi quadre.

Sequenze protette che specificano dichiarazioni sono pure differenti in modalità Perl. Una dichiarazione specifica una condizione che deve essere soddisfatta in un punto particolare della corrispondenza, senza dover levare alcun carattere dalla stringa di partenza. L’uso di sotto-espressioni per dichiarazioni più complesse è descritto sotto. Le dichiarazioni protette sono

\b

Dichiara che il punto è sul confine di una parola. Il confine di una parola è una posizione nella stringa in esame in cui il carattere corrente e il precedente non corrispondono entrambi a \w o \W (ossia, uno corrisponde a \w e l’altro corrisponde a \W), cioè l’inizio o la fine della stringa se il primo o l’ultimo carattere corrisponde a \w, rispettivamente.

\B

Dichiara che il punto non è sul confine di una parola.

\A

Dichiara che la corrispondenza è all’inizio del pattern space (a prescindere dalla modalità multiriga).

\Z

Dichiara che la corrispondenza è alla fine del pattern space, o al newline prima della fine del pattern space (a prescindere dalla modalità multiriga).

\z

Dichiara che la corrispondenza è alla fine del pattern space (a prescindere dalla modalità multiriga).

Queste dichiarazioni possono non apparire nelle classi di caratteri (ma si noti che \b ha un significato differente, ossia il carattere di cancellazione, all’interno di una classe di caratteri). Si noti che la modalità Perl non supporta direttamente dichiarazioni per l’inizio e la fine di una parola; le estensioni GNU \< e \> permettono invece di ottenere ciò in modalità POSIX.

Le dichiarazioni \A, \Z, e \z differiscono dai tradizionali segni di accento circonflesso e dollaro (descritti sotto) per il fatto che corrispondono solo all’inizio e alla fine della stringa in esame, quali che siano le opzioni impostate; in particolare \A e \z sono equivalenti alle estensioni GNU \` e \' che sono attive in modalità POSIX.


Note a piè di pagina

(13)

Un’espressione si dice “di cattura” se trova una stringa di lunghezza maggiore di zero. Per esempio, un inizio di riga non è una stringa di cattura.


Successivo: , Su: regexp Perl   [Contenuti][Indice]