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:
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 |
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 |
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.