Alt Şablonlar
Alt şablonlar yaylı ayraçlarla sınırlanır ve iç içe olabilirler. Bir
şablonun bir alt parçası iki şekilde kendini gösterir:
-
Bir olasılık kümesinden oluşabilir. Örneğin,
gel(enek|incik|)
şablonu "gel", "gelenek" ve
"gelincik" sözcüklerinden biriyle eşleşecektir. Yaylı ayraçlar
olmasaydı "gelenek", "incik" ve boş bir dizge ile eşleşirdi.
-
Şablon grupları olarak görünebilir (aşağıya bakınız). Şablonun tamamı
eşleştiğinde, eşleşmeye konu dizgenin alt şablonla eşleşen parçası
pcre_exec() işlevinin ovector
bağımsız değişkeni üzerinden çağrıcıya aktarılır. Yakalayan alt şablon
sayısını tutturmak için grup açılışları soldan sağa doğru sayılır
(ilk grup 1 olmak üzere).
Örneğin, "the red king" dizgesini the ((red|white)
(king|queen))
şablonuyla eşleştirmek istersek "red king",
"red" ve "king" dizgeleri 1, 2 ve 3 olarak numaralanacaktır.
Aslında, salt yaylı ayraçları kullanarak bu iki işlevi yerine getirmek
her zaman yararlı olmaz. Çoğu zaman bir gruplama alt şablonu bir
yakalama gereksinimi olmaksızın kullanılır. Eğer açan yaylı ayracı
takiben bir "?:" dizilimi varsa bu alt şablon herhangi bir yakalama
yapmaz ve ardından gelen diğer yakalayan alt şablonların sayısında
hesaba katılmaz. Örneğin, "the white queen" dizgesini the
((?:red|white) (king|queen))
şablonu ile eşleştirmek istersek
"white queen" ve "queen" alt dizgeleri 1 ve 2 olarak numaralanır.
Yakalayan alt şablonların azami sayısı 65535'tir. Bununla birlikte,
libpcre'nin yapılandırma seçeneklerine bağlı olarak bu kadar büyük
şablonları derlemek mümkün olmayabilir.
Uygun bir kısaltma olarak, yakalamayan bir alt şablonun başlangıcında bir
seçenek ayarı gerekliyse seçenek harfleri "?" ile ":" arasına konabilir.
Dolayısıyla,
(?i:saturday|sunday)
(?:(?i)saturday|sunday)
şablonlarının ikisi de aynı dizgeyle eşleşecektir. Olasılıklar soldan
sağa değerlendirildiğinden ve seçenekler alt şablonun sonuna
ulaşılıncaya kadar sıfırlanmayacağından tek bir olasılık dahilindeki bir
seçenek ayarı sonraki olasılıkları da etkileyecektir, dolayısıyla
yukarıdaki şablonlar "Saturday" ve hatta "SUNDAY" ile de eşleşecektir.
Bir alt şablonu
(?P<ad>kalıp)
ile isimlendirmek mümkündür.
Eşleşmeleri içeren dizi, numaralarına göre indislenmiş eşleşmelerin
yanısıra dizgelerine göre indislenmiş eşleşmeleri de içerecektir. Buna
eşdeğer iki sözdizimi daha vardır: (?<ad>kalıp)
ve (?'ad'kalıp)
Bazen, düzenli bir ifadede birden çok eşleşen, ancak değişen alt grupların
varlığı gerekir. Normalde, bunlardan yalnızca biri muhtemelen eşleşecek
olsa bile, bunların her birine kendi geri başvuru numarası verilir. Bunun
üstesinden gelmek için, (?|
sözdizimi yinelenen sayılara
izin verir. Sunday
dizgesiyle eşleşen aşağıdaki normal
ifade ele alınırsa:
Burada Sun
, 2. geri başvuruda depolanırken, 1. geri
başvuru boştur. Saturday
eşleşmesi, 1. geri başvuruda
Sat
verir, 2. geri başvuru yoktur.
(?|
kullanmak için kalıbı değiştirmek bu sorunu giderir:
Bu kalıp kullanılarak, hem Sun
hem de
Sat
1. geri başvuruda saklanacaktır.