Regular Expressions Backreferences e gruppi non di cattura


Esempio

Poiché i gruppi sono "numerati", alcuni motori supportano anche la corrispondenza di ciò che un gruppo ha precedentemente abbinato di nuovo.

Supponendo che tu voglia abbinare qualcosa dove due stringhe uguali di lunghezza tre sono divise da un $ che useresti:

(.{3})\$\1

Questo corrisponderebbe a qualsiasi delle seguenti stringhe:

"abc$abc"
"a b$a b"
"af $af "
"   $   "

Se vuoi che un gruppo non sia numerato dal motore, puoi dichiararlo non catturante. Un gruppo non catturante assomiglia a questo:

(?:)

Sono particolarmente utili per ripetere un determinato pattern un numero qualsiasi di volte, poiché un gruppo può anche essere usato come un "atomo". Tenere conto:

(\d{4}(?:-\d{2}){2} \d{2}:\d{2}.\d{3}) (.*)[\r\n]+\1 \2

Ciò corrisponderà a due voci di registrazione nelle righe adiacenti che hanno lo stesso timestamp e la stessa voce.