Yineleme, aşağıdaki öğeleri takibeden niceleyicilerle belirtilir:
Genel yineleme niceleyicileri, kaşlı ayraçlar arasına alınıp virgülle
ayrılmış olarak asgari ve azami miktarda eşleşme belirirler. Belirtilen
sayılar 65536'dan küçük olmalı ve ilk sayı ikincisine eşit veya ondan
küçük olmalıdır. Örneğin, z{2,4}
şablonu "zz", "zzz"
veya "zzzz" ile eşleşecektir. Kapatan kaşlı ayraç özel bir karakter
değil, kendisidir. Eğer virgül konduğu halde ikinci niceleyici
verilmezse bir üst sınır olmayacaktır. Eğer ikinci niceleyici virgülsüz
olarak belirtilmemişse, tam olarak belirtilen sayıda eşleşme sağlanmaya
çalışılır. Dolayısıyla, [aeiou]{3,}
şablonu en az üç
sesli harfle eşleşecektir. Ancak, \d{8}
şablonu tam
olarak 8 rakamla eşleşecektir. Şayet birinci niceleyici belirtilmezse
veya kaşlı ayraçtan sonraki karakter bir rakam değilse kaşlı ayraç
sadece kendisiyle eşleşir. Örneğin, {,6} şablonu bir yineleyici değil,
dört karakterden oluşan sıradan bir dizgedir.
Bir yineleyici olarak {0} şablonuna izin verilir ve ifadenin, önceki öğe ve niceleyici hiç yokmuş gibi davranmasına sebep olur.
Geriye uyumluluk adına, üç yineleyici türünün tek karakterlik kısaltmalarına izin verilmektedir:
* |
{0,} yineleyicisine eşdeğerdir. |
+ |
{1,} yineleyicisine eşdeğerdir. |
? |
{0,1} yineleyicisine eşdeğerdir. |
Hiçbir karakterle eşleşmeyen bir alt şablonu takibeden üst sınırsız bir
yineleyici belirterek sonsuz döngü oluşturmak mümkündür. Örnek:
(a?)*
Perl ve PCRE'nin önceki sürümleri böyle şablonların derlenmesi sırasında hata verirdi. Ancak, bu şablonlar bazen yararlı olabildiklerinden artık kabul edilmektedir, fakat hiçbir karakterle eşleşmeme durumunda döngü bilinçli olarak kırılmaktadır.
Yineleyiciler öntanımlı olarak "açgözlü" olurlar. Yani, şablonun geri
kalanının başarısız olmasına sebep olmaksızın olabildiğince çok (azami
niceleyicisinin izin verdiği ölçüde) eşleşme yapmaya çalışır. Klasik bir
örnek olarak, C kodları arasındaki açıklamalarla eşleşme sorunları
verilebilir. Bu açıklamalar /* ve */ dizilimleri arasında bulunurlar ve
içlerinde birbirlerinden bağımsız olarak / ve * karakterleri
bulunabilir. Örneğin, /\*.*\*/
şablonu
/* birinci açıklama */ bu açıklama değil /* ikinci açıklama
*/
dizgesiyle eşleştirilmeye çalışıldığında başarısız
olunacaktır. Çünkü .* öğesinin açgözlülüğü yüzünden dizgenin tamamı ile
eşleşecektir.
Bununla birlikte, bir yineleyicinin ardına bir soru imi konursa,
açgözlülüğe son verilmiş olur ve olası en az sayıda eşleşme yapılmaya
çalışılır. Dolayısıyla, /\*.*?\*/
şablonu C
açıklamaları ile beklendiği gibi eşleşir. Yineleyiciler, anlamları
değiştirilmediği sürece sadece tercih edilen sayıda eşleşme yapacaktır.
Soru imini, bir yineleyici olarak kendisinin sonrasına koymaktan
çekinmeyin. İki çeşit kullanımı olduğundan bazen
\d??\d
örneğindeki gibi bir soru imi çifti olarak
görünür ve tercihan tek bir rakamla eşleşirse de şablonun kalanının
eşleşmesi için başka çare yoksa iki rakamla da eşleşir.
PCRE_UNGREEDY seçeneği (Perl'de bulunmayan bir seçenektir) etkinse yineleyiciler öntanımlı olarak açgözlü olmazlar, fakat bir yineleyiciyi takibeden bir soru imi varsa o yineleyici açgözlülük gösterebilir. Başka bir deyişle, bu seçenek öntanımlı davranışı tersine çevirir.
+
imi yineleyicilerin ardına konduğunda yineleyiciyi
bencilleştirir. Yani, şablonun kalanının başarısızlığı pahasına
olabildiğince çok eşleşme yapmaya çalışır. Bu bakımdan, örneğin,
.*abc
şablonu "aabc" ile eşleştiği halde
.*+abc
şablonu eşleşmeyecektir. Çünkü
.*+
dizgenin tamamını yiyecektir.
Bir yaylı ayraçlı alt şablon, 1'den büyük bir asgari ve sınırlı bir azami yineleme değeriyle nicelendiğinde derlenmiş şablon için asgari ve azami değerlerin büyüklüklerine bağlı olarak daha fazla alan gerekir.
Eğer bir şablon, .* veya .{0,} ile başlıyorsa ve (Perl'in /s seçeneğine eşdeğer) PCRE_DOTALL seçeneği etkinse, noktanın satırsonu karakterleriyle eşleşmesini sağlamak için, eşleşmeye konu dizgedeki karakterleri şablonun kalanı ile eşleştirmek adına, şablon örtük olarak satırsonlarına demirlenir. Dolayısıyla, ilkinden sonraki eşleşmeler için yineleme gereği kalmaz. PCRE böyle bir şablonu \A ile öncelenmiş gibi ele alır. Eşleşmeye konu dizgenin satırsonu karakterlerini içermediğinin bilindiği durumlarda, demirleme işlemini dolaylı olarak belirtmek amacıyla ^ kullanmak veya bu en iyilemeyi sağlamak için şablon .* ile başlatıldığı takdirde PCRE_DOTALL seçeneğini etkin kılmak akıllıca olur.
Bir yakalayan alt şablonun yinelenmesi durumunda, alt şablonun eşleştiği
alt dizge son yineleme ile eşleşen alt dizgedir. Örneğin,
(tweedle[dume]{3}\s*)+
şablonu "tweedledum
tweedledee" dizgesiyle eşleştirilmeye çalışıldığında eşleşen alt dizge
"tweedledee" olur. Bununla birlikte, iç içe yakalayan alt şablonların
varlığında, alt şablonun eşleştiği alt dizge önceki yinelemelerle
eşleşen alt dizgeler olabilir. Örneğin, /(a|(b))+/
şablonu "aba" ile eşleştirilmeye çalışıldığında eşleşen ikinci alt dizge
"b" olur.