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 supports the POSIX notation for character classes. This uses names enclosed by [: and :] within the enclosing square brackets. PCRE also supports this notation. For example, [01[:alpha:]%] matches "0", "1", any alphabetic character, or "%". The supported class names are:
alnum | letters and digits |
alpha | letters |
ascii | character codes 0 - 127 |
blank | space or tab only |
cntrl | control characters |
digit | decimal digits (same as \d) |
graph | printing characters, excluding space |
lower | lower case letters |
printing characters, including space | |
punct | printing characters, excluding letters and digits |
space | white space (not quite the same as \s) |
upper | upper case letters |
word | "word" characters (same as \w) |
xdigit | hexadecimal digits |
The name word is a Perl extension, and blank is a GNU extension from Perl 5.8. Another Perl extension is negation, which is indicated by a ^ character after the colon. For example, [12[:^digit:]] matches "1", "2", or any non-digit.
In UTF-8 mode, characters with values greater than 128 do not match any of the POSIX character classes.