Alcune precisazioni sul metodo di verifica delle corrispondenze
Alla base della verifica delle corrispondenze fra pattern e stringa di input, vi è un confronto carattere per carattere fra le due sequenze di caratteri.
In pratica il motore regexp per prima cosa risolve i significati dei metacaratteri e poi procede al confronto del primo carattere della stringa di input con il primo carattere del pattern.
Se questo primo confronto dà una corrispondenza, il motore confronta il secondo carattere della stringa di input con il secondo carattere del pattern; se anche questo confronto da una corrispondenza, si confrontano i due terzi caratteri e così via, nel caso di corrispondenze successive, fino ad esaurire i caratteri del pattern.
Ma cosa succede se uno dei confronti non realizza una corrispondenza?
Si supponga che il confronto fra il primo carattere della stringa di input ed il primo carattere del pattern abbia dato una corrispondenza; in tal caso il secondo carattere della stringa di input viene confrontato con il secondo carattere del pattern; tale confronto fallisce, cioè non dà una corrispondenza, ed allora il motore di ricerca azzera la corrispondenza rilevata fra i due primi caratteri ed incomincia un nuovo confronto, che riguarderà il primo carattere del pattern e il secondo carattere della stringa di input.
Se questo confronto dà una corrispondenza, allora il terzo carattere della stringa di input viene confrontato con il secondo carattere del pattern; se c'è corrispondenza si confrontano il quarto ed il terzo rispettivamente della stringa di input e del pattern; se invece non c'è corrispondenza si azzerano quelle finora rilevate e si riparte con un confronto fra il terzo carattere della stringa di input ed il primo carattere del pattern.
Tutti i confronti, fino ad esaurimento di una delle due stringhe, seguono questa logica.
Come esempio si spiegheranno passo passo i vari confronti implementati dal motore di ricerca nei casi definiti nella tabella "Corrispondenze per la parola carma":
-
Stringa di input [SI] carma, pattern [PT] c...
-
Confronto del primo carattere di [SI] con il primo carattere di [PT]: c su c corrispondenza.
-
Confronto del secondo carattere di [SI] con il secondo carattere di [PT]: a su . corrispondenza
-
Confronto del terzo carattere di [SI] con il terzo carattere di [PT] r su . corrispondenza
-
Confronto del quarto carattere di [SI] con il quarto carattere di [PT] -> m su . corrispondenza
Il confronto si conclude con una corrispondenza fra [SI] e [PT] per la parola carm.
- Stringa di input [SI] carma, pattern [PT] c..a
- Confronto del primo carattere di [SI] con il primo carattere di [PT] c su c corrispondenza.
- Confronto del secondo carattere di [SI] con il secondo carattere di [PT] a su . corrispondenza
- Confronto del terzo carattere di [SI] con il terzo carattere di [PT] r su . corrispondenza
- Confronto del quarto carattere di [SI] con il quarto carattere di [PT] m su a non corrispondenza
- azzerate le precedenti corrispondenze
- Confronto del secondo carattere di [SI] con il primo carattere di [PT] a su c non corrispondenza
- Confronto del terzo carattere di [SI] con il primo carattere di [PT] r su c non corrispondenza
- Confronto del quarto carattere di [SI] con il primo carattere di [PT] m su c non corrispondenza
- Confronto del quinto carattere di [SI] con il primo carattere di [PT] a su c non corrispondenza
Il confronto si conclude con una non corrispondenza fra [SI] e [PT]
-
Stringa di input [SI] carma, pattern [PT] ...a
- Confronto del primo carattere di [SI] con il primo carattere di [PT] c su . corrispondenza.
- Confronto del secondo carattere di [SI] con il secondo carattere di [PT] a su . corrispondenza
- Confronto del terzo carattere di [SI] con il terzo carattere di [PT] r su . corrispondenza
- Confronto del quarto carattere di [SI] con il quarto carattere di [PT] m su a non corrispondenza
- azzerate le precedenti corrispondenze
- Confronto del secondo carattere di [SI] con il primo carattere di [PT] a su . corrispondenza
- Confronto del terzo carattere di [SI] con il secondo carattere di [PT] r su . corrispondenza
- Confronto del quarto carattere di [SI] con il terzo carattere di [PT] m su . corrispondenza
- Confronto del quinto carattere di [SI] con il quarto carattere di [PT] a su a corrispondenza
Il confronto si conclude con una corrispondenza fra [SI] e [PT] per la parola arma.