Le asserzioni

Le asserzioni permettono ad un'espressione regolare di corrispondere solo a certe condizioni.

Un'asserzione non corrisponde necessariamente a un carattere, piuttosto impone delle restrizioni sulle condizioni della possibile corrispondenza prima di riconoscerla. Ad esempio, l'asserzione confine parola non cerca di trovare un carattere non-parola di fianco ad uno di parola, si assicura solo che non ci sia un carattere parola. Quindi l'asserzione corrisponde dove non c'è un carattere, cioè alla fine della stringa in esame.

Alcune asserzioni hanno effettivamente modelli da confrontare, ma la parte di stringa a cui corrispondono non farà parte del risultato del confronto dell'espressione regolare intera.

Le espressioni regolari qui documentate permettono di usare le seguenti asserzioni:

^ (accento circonflesso: inizio della stringa)

Corrisponde all'inizio della stringa cercata.

L'espressione ^Peter corrisponderà a «Peter» nella stringa «Peter, hey!», ma non in «Hey, Peter!»

$ (fine della stringa)

Corrisponde alla fine della stringa cercata.

L'espressione you\?$ corrisponde all'ultimo you della frase «You didn't do that, did you?» man non a «You didn't do that, right?»

\b (confine parola)

Corrisponde se c'è un carattere di parola su un lato, ed un carattere che non fa parte di una parola sull'altro.

È utile per trovare le estremità di una parola. Come esempio, all'espressione \bin\b corrisponde l'«in» in «He came in through the window», ma non l'«in» di «window».

\B (non confine parola)

Corrisponde a tutto quello che non corrisponde a «\b».

Ciò significa che corrisponderà ad esempio all'interno di parole: L'espressione \Bin\B corrisponde in «window» ma non in «integer» o in «I'm in love».

(?=MODELLO) (Lookahead positivo)

Un'asserzione di lookahead controlla la parte della stringa che segue una potenziale corrispondenza. Il lookahead positivo impedirà che la stringa corrisponda se il testo che segue non corrisponde al MODELLO dell'asserzione, ma il testo a cui corrisponde non sarà incluso nel risultato.

L'espressione handy(?=\w) corrisponderà a «handy» in «handyman» ma non in «That came in handy!»

(?!MODELLO) (Lookahead negativo)

Il lookahead negativo impedisce una potenziale corrispondenza se la parte seguente della stringa in esame non corrisponde al MODELLO.

L'espressione const \w+\b(?!\s*&) corrisponde a «const char» nella stringa «const char* foo», mentre non corrisponde a «const QString» in «const QString& bar» perché «&» corrisponde al modello dell'asserzione di lookahead negativo.