Devono naturalmente essere gestite anche le particolari corrispondenze in cui tutta o parte della RE si ripetono.
Il metacarattere `*' specifica che la RE che lo precede (può essere un singolo carattere, ma a esempio anche un intervallo [a-z]) può ripetersi zero o più volte, quindi a esempio 'pip*o' trova corrispondenza in 'pio' (zero 'p'), 'pipo', 'pippo', 'pipppo' e così via.
Simile è il comportamento di `+', che specifica che la RE che lo precede può ripetersi una o più volte. Quindi 'pip+o' troverà corrispondenza in 'pipo', 'pippo', 'pipppo' e così via, ma non in 'pio' (al minimo una 'p').
Più ristretto è il comportamento di `?', che specifica che la RE che lo precede può ripetersi zero o una volta. Quindi la nostra 'pip?o' troverà corrispondenza solo in 'pio' o 'pipo'.
Resta il modificatore più complesso tra quelli dedicati alle ripetizioni: {m,n}, con m e n interi decimali. Esso specifica che della RE che lo precede vanno ricercate un numero di corrispondenze compreso tra m e n, il massimo possibile. n può essere omesso, in tal caso viene preso un limite superiore talmente alto da poter essere considerato infinito agli effetti pratici. A esempio 'ar{1,3}gh' può corrispondere ad 'argh', 'arrgh' e 'arrrgh', ma non ad 'agh' o 'arrrrgh'.
Si faccia attenzione a un aspetto: i modificatori `*', `+' e `{m,n}' cercheranno di far corrispondere il massimo numero di caratteri possibile.
Di `{m,n}' esiste una versione minimalista, `{m,n}?' che specifica la corrispondenza di un numero di RE sempre compreso tra m e n, ma questa volta il minimo possibile.
Si noti che {0,} equivale a `*', {1,} a `+' e {0,1} è la stessa cosa di `?'. Il loro uso è semplicemente una questione di concisione e facilità di lettura.