左方括號開(kāi)始一個(gè)字符類(lèi)的描述,并以方中括號結束。 單獨的一個(gè)右方括號沒(méi)有特殊含義。如果一個(gè)右方括號需要作為一個(gè)字符類(lèi)中的成員, 那么可以將它寫(xiě)在字符類(lèi)的首字符處(如果使用了 ^ 取反, 那么是第二個(gè))或者使用轉義符。
一個(gè)字符類(lèi)在目標字符串中匹配一個(gè)單獨的字符; 該字符必須是字符類(lèi)中定義的字符集合的其中一個(gè), 除非使用了 ^ 對字符類(lèi)取反。 如果^需要作為一個(gè)字符類(lèi)的成員,確保它不是該字符類(lèi)的首字符, 或者對其進(jìn)行轉義即可。
例如,字符類(lèi)[aeiou]匹配所有的小寫(xiě)元音字母, 而[^aeiou]匹配所有非元音字母的字符。注意: ^只是一個(gè)通過(guò)枚舉指定那些不存在字符類(lèi)之中的字符的便利符號。而不是斷言, 它仍然會(huì )從目標字符串中消耗一個(gè)字符,并且如果當前匹配點(diǎn)在目標字符串末尾, 匹配將會(huì )失敗。
當大小寫(xiě)無(wú)關(guān)匹配被設置后,任意字符類(lèi)都同時(shí)代表大小寫(xiě)兩種版本,因此對于例子, 一個(gè)大小寫(xiě)不敏感的[aeiou]同時(shí)匹配"A"和"a", 并且大小寫(xiě)不敏感的[^aeiou]同時(shí)不匹配 "A"。
換行符在字符類(lèi)中沒(méi)有任何特殊涵義, 與 PCRE_DOTALL 或 PCRE_MULTILINE 選項都無(wú)關(guān)。 例如 [^a] 這樣的字符類(lèi)始終會(huì )匹配換行符。
在字符類(lèi)中,一個(gè)中劃線(xiàn)(減號 -)可以用于指定從一個(gè)字符到另一個(gè)字符的范圍。 比如,[d-m]匹配d到m之間的所有字符,這個(gè)集合時(shí)閉合的。 如果中劃線(xiàn)自身要在一個(gè)字符類(lèi)中描述, 它必須被轉移或者出現在一個(gè)不會(huì )被解釋為一個(gè)范圍的位置, 典型的比如字符類(lèi)開(kāi)始或結束位置。
在一個(gè)字符范圍描述后面不能使用右中括號。 比如一個(gè)模式 [W-]46] 被解釋為一個(gè)包含 W 和 - 的字符類(lèi),后面緊跟字符串 ”46]”, 因此它可以匹配 ”W46]” 或 ”-46]”。然而, 如果中括號是經(jīng)過(guò)轉義的, 它將會(huì )被解釋為范圍的終點(diǎn), 因此 [W-\]46] 就會(huì )被解釋為一個(gè)單獨的包含 W 至 ] 范圍內所有字符以及 4、6 的字符類(lèi)。 8 進(jìn)制或 16 進(jìn)制描述的中括號同樣可以用于作為范圍的終點(diǎn)。
范圍操作以 ASCII 整理排序。它們可以用于為字符指定數值,比如 [\000-\037]。 如果在大小寫(xiě)不敏感匹配模式下使用一個(gè)包含字母的范圍, 則同時(shí)匹配它的大小寫(xiě)形式。 比如 [W-c] 在不區分大小寫(xiě)匹配時(shí)等價(jià)于 [][\^_`wxyzabc],并且, 如果使用了 ”fr”(法國) 的地域設置字符表時(shí), [\xc8-xcb] 將會(huì )在所有模式下匹配重音 E 字符。
字符類(lèi)\d、\D、 \s、\S、\w 和 \W 也可以出現在一個(gè)字符類(lèi)中, 用以將其匹配的字符類(lèi)加入到新的自定義字符類(lèi)中。比如, [\dABCDEF] 匹配任意合法的 16 進(jìn)制數。用 ^ 可以很方便的制定嚴格的字符類(lèi), 比如 [^\W_] 匹配任何字母或數字,但不匹配下劃線(xiàn)。
所有非字母數字字符除了\、-、 ^(在起始位置)以及結束的]在字符類(lèi)中都是非特殊字符, 沒(méi)有轉義也不會(huì )有危害。模式結束符在表達式中總是特殊字符,必須進(jìn)行轉義。
Perl 支持 POSIX 字符類(lèi)符號。這種字符類(lèi)使用[:
和:]
閉合。 PCRE 同樣支持這些字符類(lèi),
比如,[01[:alpha:]%]
匹配 ”0”、“1”、任意字母或”%”。 支持的字符類(lèi)如下:
alnum | 字母和數字 |
alpha | 字母 |
ascii | 0 - 127的ascii字符 |
blank | 空格和水平制表符 |
cntrl | 控制字符 |
digit | 十進(jìn)制數(same as \d) |
graph | 打印字符, 不包括空格 |
lower | 小寫(xiě)字母 |
print | 打印字符,包含空格 |
punct | 打印字符, 不包括字母和數字 |
space | 空白字符 (比\s多垂直制表符) |
upper | 大寫(xiě)字母 |
word | 單詞字符(和 \w 一樣) |
xdigit | 十六進(jìn)制數字 |
\s
,
因為它不包含垂直制表符(為了向 Perl 兼容)
[:word:]
是一個(gè) Perl擴展,[:blank:]
是一個(gè)從 Perl5.8 中來(lái)的 GNU 擴展。
另外一個(gè) Perl 擴展是取反,通過(guò)前置一個(gè)^
。 比如,
[12[:^digit:]]
匹配”1”,
“2” 或任何非數字字符
在 UTF-8 模式中,大于 128 的字符值不會(huì )匹配任何 POSIX 字符類(lèi)。 自 libpcre 8.10 起,某些字符類(lèi)改為使用 Unicode 字符屬性,所以不會(huì )出現提醒中的限制。 詳情參閱 ? PCRE(3) manual。
Unicode character properties can appear inside a character class. They can not be part of a range. The minus (hyphen) character after a Unicode character class will match literally. Trying to end a range with a Unicode character property will result in a warning.