Condividi tramite


Corrispondenza successiva dopo una corrispondenza vuota

Quando una corrispondenza è ripetuta in una stringa, tramite la chiamata a NextMatch o tramite l'insieme restituito da Regex.Matches, il modulo delle espressioni regolari esegue un trattamento speciale per le corrispondenze vuote.

NextMatch inizia in genere la corrispondenza successiva nel punto esatto in cui è stata interrotta quella precedente. Dopo una corrispondenza vuota tuttavia, NextMatch avanza di un carattere prima di cercare la corrispondenza successiva. Questa regola garantisce che il modulo per la ricerca delle corrispondenze avanzi all'interno della stringa. Se non vi fosse tale avanzamento, la corrispondenza successiva inizierebbe esattamente nello stesso punto della precedente, restituendo ripetutamente la stessa stringa vuota.

La ricerca di "a*" nella stringa "abaabb" restituisce ad esempio la seguente sequenza di corrispondenze.

"a", "", "aa", "", "", ""

Di seguito è riportata un'altra visualizzazione, nel contesto:

(a)()b(aa)()b()b()

La prima corrispondenza consente di ottenere la prima a. La seconda corrispondenza inizia nel punto esatto in cui è terminata la prima, prima della prima b. Non viene trovata alcuna occorrenza di a e viene restituita la stringa vuota.

La terza corrispondenza non inizia esattamente dove è finita la seconda corrispondenza, poiché la seconda ha restituito una stringa vuota. Inizia invece un carattere dopo, dopo la prima b. La terza corrispondenza consente di trovare due occorrenze di a e viene restituito "aa".

La quarta corrispondenza inizia dove è finita la terza, prima della seconda b, e individua la stringa vuota. La quinta corrispondenza inizia quindi prima dell'ultima b e individua nuovamente la stringa vuota. La sesta corrispondenza inizia dopo l'ultima b e individua ancora la stringa vuota.

Vedere anche

Altre risorse

Espressioni regolari di .NET Framework