Karakter Sınıfları - Köşeli Ayraçlar
Bir karakter sınıfı [ köşeli ayracıyla ] köşeli ayracı arasına alınarak
tanımlanır. Bir karakter sınıfı içinde ] köşeli ayracının özel bir
anlamı yoktur, ancak bir karakter sınıfı içinde kullanılması gerekliyse
sınıfın (varsa, şapka iminden sonraki) ilk üyesi olmak zorundadır, yoksa
bir tersbölüyle öncelenmesi gerekir.
Bir karakter sınıfı eşleşmeye konu dizgenin içindeki tek bir karakterle
eşleşir; sınıfın ilk üyesi bir şapka imi olmadıkça, eşleşen karakterin
karakter sınıfının üyesi olması yeterlidir; aksi takdirde eşleşen
karakterin sınıfın bir üyesi olmaması gerekir. Eğer şapka iminin bir
karakter sınıfının üyesi olması gerekliyse, ya sınıfın ilk üyesi
olmamalı ya da bir tersbölü ile öncelenmelidir.
Örneğin, [aeıioöuü] sınıfı herhangi bir küçük sesli ile eşleşirken
[^aeıioöuü] sınıfı herhangi bir küçük sessizle eşleşecektir. Yalnız
şuna dikkat edin: Karakter sınıfının başlangıcındaki şapka imi, sadece
sınıfı olumsuzlayan bir gösterim uzlaşımıdır. Bir tez işleci değildir;
eşleşmeye konu dizge içindeki karakterleri yine de tüketmeye devam eder
ve dizgenin sonuna gelindiğinde başarısız olur.
Harf büyüklüğüne duyarsız eşleşme etkinken, sınıf içindeki herhangi bir
harf, hem büyük hem de küçük harfi simgeleyecektir. Örneğin, harf
büyüklüğüne duyarsız eşleşme etkinken [aeiou] sınıfı "A" veya "a" ile
eşleşirken, [^aeiou] sınıfı harf büyüklüğüne duyarlılık etkin kılınmış
gibi sadece "A" ile eşleşmeyecektir.
Satırsonu karakteri,
PCRE_DOTALL
veya
PCRE_MULTILINE
seçeneği atanmış olsun ya da olmasın karakter sınıfları içinde asla
özel bir anlamda ele alınmaz. [^a] gibi bir sınıf daima bir satırsonu
karakteri ile eşleşecektir.
Tire imi, bir karakter sınıfı içinde bir aralık belirtmek için
kullanılabilir. Örneğin, [d-m] sınıfı, d ve m dahil ikisi arasında
kalan herhangi bir karakterle eşleşecektir. Eğer bir tire iminin
sınıfın bir üyesi olması gerekliyse, ya bir aralık belirteci olarak
değerlendirilmeyeceği bir yere (başa veya sona) konmalı ya da tersbölü
ile öncelenmelidir.
Bir "]" karakterinin kendisi olarak bir aralığın son karakteri olması
mümkün değildir. Örneğin, [W-]46] şablonu içindeki sınıf "W" ve "-"
karakterlerinden oluşacak, dolayısıyla sadece "W46]" veya "-46]"
dizgesiyle eşleşecektir. Halbuki, "]" karakteri bir tersbölü ile
öncelenseydi, [W-\]46] şablonu içindeki sınıf "W" ve "]" dahil arada
kalan tüm karakterlerle eşleşecekti. Sınıf içinde "]" karakterini
tersbölü ile öncelemek yerine karakterin sekizlik veya onaltılık
gösterimleri de kullanılabilirdi.
Aralıklar ASCII harmanlama dizilimleri olarak çalışabildiği gibi
örneğin, [\000-\037] şeklinde sayısal olarak belirtilmiş karakterler
içinde kullanılabilir. Eğer harflerden oluşan bir aralık belirtilmişse
ve harf büyüklüğüne duyarsız eşleşme yapılıyorsa aralık, içerdiği bir
harfin hem büyüğüyle hem de küçüğüyle eşleşecektir. Örneğin [W-c]
aralığı harf büyüklüğüne duyarsız olarak [][\^_`wxyzabc] dizgesiyle
eşleşir. Eğer "tr" yereli kullanılıyorsa, [\xc6-\xcb] aralığı hem büyük
hem de küçük Ç ile eşleşir.
\d, \D, \s, \S, \w ve \W karakter türleri de bir karakter sınıfı içinde
kullanılabilir ve sınıfa eşleştikleri karakterleri eklerler. Örneğin,
[\dABCDEF] sınıfı herhangi bir onaltılık rakam ile eşleşecektir. Şapka
karakteri, küçük harfli işleçlerle sağlanandan daha sınırlı bir kümeyi
belirtmek için büyük harfli işleçlerle kullanılabilir. Örneğin, [^\W_]
sınıfı alt çizgi imi hariç herhangi bir harf veya rakam ile
eşleşecektir.
Bir karakter sınıfının başlangıcında belirtildiğinde \, -, ^
karakterleri ve sonlandırıcı ] karakteri, karakter sınıfı içinde özel
bir anlama sahip değildir, ancak öncelenmiş olmaları da bir sorun
teşkil etmezdi. Şablon sonlandırıcı daima özeldir ve bir ifade içinde
kullanıldığında daima öncelenmesi gerekir.
Perl, karakter sınıfları için POSIX gösterimini destekler. Bu gösterimde
sınıf isimleri [:
ve :]
karakterleri arasına alınır. Örneğin, [01[:alpha:]%]
şablonu, "0", "1", herhangi bir abecesel karakter veya "%" ile
eşleşecekir. Desteklenen sınıf isimleri şunlardır:
Karakter sınıfları
alnum | harfler ve rakamlar |
alpha | sadece harfler |
ascii | 0 - 127 arasındaki karakter kodları |
blank | sadece boşluk ve sekme karakteri |
cntrl | denetim karakterleri |
digit | onluk rakamlar (\d ile aynı) |
graph | boşluk hariç tüm basılabilen karakterler |
lower | küçük harfler |
print | boşluk dahil tüm basılabilen karakterler |
punct | harfler ve rakamlar hariç tüm basılabilen karakterler |
space | tüm boşluk karakterleri (\s ile benzer fakat aynı değil) |
upper | büyük harfler |
word | "sözcük" karakterleri (\w ile aynı) |
xdigit | onaltılık rakamlar |
space
karakterleri: HT (9), LF (10), VT (11), FF (12),
CR (13) ve boşluk (32). Farkedeceğiniz gibi VT karakteri de (kod
11) listeye dahil edilmiştir. Perl uyumluluğu açısından "space" ile
\s
arasındaki fark budur.
word
ismi bir Perl eklemesi olup
blank
ismi Perl 5.8'deki bir GNU eklemesidir. Diğer
bir ekleme de olumsuzlama belirten ^
karakteri olup
ikinokta iminden hemen sonra kullanılır. Örneğin,
[12[:^digit:]]
şablonu "1", "2" veya rakam olmayan
herhangi bir karakter ile eşleşir.
UTF-8 kipinde, 128'den büyük değerli karakterler POSIX karakter
sınıflarının hiçbiriyle eşleşmeyecektir. libpcre 8.10'dan
itibaren bazı karakter sınıfları Unicode karakter özelliklerini
kullanacak şekilde değiştirilmiştir, bu durumda söz konusu kısıtlama
geçerli değildir. Ayrıntılar için » PCRE(3) kılavuzuna bakın.