字元類別
更新:2007 年 11 月
字元類別代表一組可與輸入字串相符的字元。結合常值 (Literal) 字元、逸出字元 (Escape Character) 及字元類別,以形成規則運算式 (Regular Expression) 模式。
字元類別會定義字元集合,某些字元類別相當於一個或多個 Unicode 一般分類值或 Unicode 區塊。Unicode 一般分類會定義字元的廣泛分類,也就是說,該字元是否為某種類型的字母、十進位數字、分隔符號、數學符號、標點符號等等。例如,Lu 一般分類代表「字母、大寫」,而 Sm 分類代表「符號、數學」。如需詳細資訊,請參閱支援的 Unicode 一般分類。
Unicode 區塊是 Unicode 字碼指標的已命名範圍。.NET Framework 會提供一組衍生自 Unicode 區塊名稱的具名區塊。例如,.NET Framework 提供了 IsBasicLatin 具名區塊,它會對應至 Basic Latin Unicode 區塊並包含範圍從 U+0000 到 U+007F 的字元。如需詳細資訊,請參閱支援的具名區塊。
.NET Framework 可支援字元類別的減法運算式,該運算式可讓您將一組字元定義為將某個字元類別從另一個字元類別中排除的結果。如需詳細資訊,請參閱字元類別減法。
字元類別的語法
下表為字元類別及其語法的摘要。
字元類別 |
說明 |
---|---|
[character_group] |
(正面字元群組)。符合指定之字元群組內的任何字元。 字元群組是由一個或多個常值字元、逸出字元、字元範圍或串連的字元類別所組成。 例如,若要指定所有的母音,請使用 [aeiou].;若要指定所有的標點符號和十進位數字字元,請使用程式碼 [\p{P}\d]。 |
[^character_group] |
(負面字元群組)。符合不屬於指定之字元群組內的任何字元。 字元群組是由一個或多個常值字元、逸出字元、字元範圍或串連的字元類別所組成。前置的向上箭號字元 (^) 是必要的,用於指示字元群組是負面字元群組,而不是正面字元群組。 例如,若要指定除了母音之外的所有字元,可以使用 [^aeiou]. ;若要指定除了標點符號和十進位數字字元之外的所有字元,則可以使用 [^\p{P}\d]。 |
[firstCharacter-lastCharacter] |
(字元範圍)。符合某個字元範圍內的任何字元。 字元範圍是一系列連續的字元,它是藉由指定此系列內的第一個字元、一個連字號 (-) 及此系列內的最後一個字元所定義。如果兩個字元具有相鄰的 Unicode 字碼指標,這兩個字元就是連續字元。可以串連兩個或多個字元範圍。 例如,若要指定十進位數字的範圍從 '0' 到 '9'、小寫字母的範圍從 'a' 到 'f',以及大寫字母的範圍從 'A' 到 'F',可使用 [0-9a-fA-F]。 |
. |
(句號字元)。比對 \n 以外的任何字元。如果由 Singleline 選項所修改,則句號字元會與任何字元相符。如需詳細資訊,請參閱規則運算式選項。 請注意,正面字元群組或負面字元群組內的句號字元 (方括號內的句號) 會被視為常值的句號字元,而不是字元類別。 |
\p{name} |
符合 Unicode 一般分類內的任何字元,或是由 name 指定之具名區塊內的任何字元 (例如,Ll、Nd、Z、IsGreek 和 IsBoxDrawing)。 |
\P{name} |
符合不屬於 Unicode 一般分類內的任何字元或是 name 中指定之具名區塊內的任何字元。 |
\w |
比對任何文字字元。相當於 Unicode 一般分類 [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]。如果使用 ECMAScript 選項指定 ECMAScript 相容的行為,則 \w 會相當於 [a-zA-Z_0-9]。 |
\W |
比對任何非文字字元。相當於 Unicode 一般分類 [^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]。如果使用 ECMAScript 選項指定 ECMAScript 相容的行為,則 \W 會相當於 [^a-zA-Z_0-9]。 |
\s |
比對任何泛空白字元。相當於逸出序列 (Escape Sequence) 和 Unicode 一般分類 [\f\n\r\t\v\x85\p{Z}]。如果使用 ECMAScript 選項指定 ECMAScript 相容的行為,則 \s 相當於 [ \f\n\r\t\v]。 |
\S |
比對任何非泛空白字元。相當於逸出序列和 Unicode 一般分類 [^\f\n\r\t\v\x85\p{Z}]。如果使用 ECMAScript 選項指定 ECMAScript 相容的行為,則 \S 相當於 [^ \f\n\r\t\v]。 |
\d |
比對任何十進位數字。相當於 Unicode 的 \p{Nd} 和非 Unicode 的 [0-9],為 ECMAScript 行為。 |
\D |
符合任何非數字字元。相當於 Unicode 的 \P{Nd} 和非 Unicode 的 [^0-9] ,為 ECMAScript 行為。 |
支援的 Unicode 一般分類
Unicode 會定義一般分類和描述,如下表所示。如需詳細資訊,請參閱 Unicode 字元資料庫內的<UCD 檔案格式>和<一般分類值>副標題 (英文)。
分類 |
說明 |
---|---|
Lu |
字母、大寫 |
Ll |
字母、小寫 |
Lt |
字母、字首大寫 |
Lm |
字母、修飾詞 (Modifier) |
Lo |
字母、其他 |
Mn |
標記、非空格 |
Mc |
標記、結合空格 |
Me |
標記、封閉式 |
Nd |
數字、十進位數字 |
Nl |
數字、字母 |
No |
數字、其他 |
Pc |
標點符號、連接線 |
Pd |
標點符號、破折號 |
Ps |
標點符號、開啟 |
Pe |
標點符號、關閉 |
Pi |
標點符號、初始引號 (根據用法,其行為可能會與 Ps 或 Pe 類似) |
Pf |
標點符號、結束引號 (根據用法,其行為可能會與 Ps 或 Pe 類似) |
Po |
標點符號、其他 |
Sm |
符號、數學 |
Sc |
符號、貨幣 |
Sk |
符號、修飾詞 |
So |
符號、其他 |
Zs |
分隔符號、空格 |
Zl |
分隔符號、線條 |
Zp |
分隔符號、段落 |
Cc |
其他、控制項 |
Cf |
其他、格式 |
Cs |
其他、Surrogate |
Co |
其他、私用 |
Cn |
其他、未指派 (沒有字元有這個屬性) |
.NET Framework 提供了代表一組 Unicode 字元分類的其他分類,如下表所示。
分類 |
表示 |
---|---|
C |
(所有控制字元) Cc、Cf、Cs、Co 和 Cn。 |
L |
(所有字母) Lu、Ll、Lt、Lm 和 Lo。 |
M |
(所有變音符號 (Diacritic) 標記) Mn、Mc 和 Me。 |
N |
(所有數字) Nd、Nl 和 No。 |
P |
(所有標點符號) Pc、Pd、Ps、Pe、Pi、Pf 和 Po。 |
S |
(所有符號) Sm、Sc、Sk 和 So。 |
Z |
(所有分隔符號) Zs、Zl 和 Zp。 |
支援的具名區塊
下表列出 .NET Framework 提供的具名區塊,這一組支援的具名區塊是根據 Unicode 4.0 和 Perl 5.6。
字碼指標範圍 |
區塊名稱 |
---|---|
0000 - 007F |
IsBasicLatin |
0080 - 00FF |
IsLatin-1Supplement |
0100 - 017F |
IsLatinExtended-A |
0180 - 024F |
IsLatinExtended-B |
0250 - 02AF |
IsIPAExtensions |
02B0 - 02FF |
IsSpacingModifierLetters |
0300 - 036F |
IsCombiningDiacriticalMarks |
0370 - 03FF |
IsGreek -或- IsGreekandCoptic |
0400 - 04FF |
IsCyrillic |
0500 - 052F |
IsCyrillicSupplement |
0530 - 058F |
IsArmenian |
0590 - 05FF |
IsHebrew |
0600 - 06FF |
IsArabic |
0700 - 074F |
IsSyriac |
0780 - 07BF |
IsThaana |
0900 - 097F |
IsDevanagari |
0980 - 09FF |
IsBengali |
0A00 - 0A7F |
IsGurmukhi |
0A80 - 0AFF |
IsGujarati |
0B00 - 0B7F |
IsOriya |
0B80 - 0BFF |
IsTamil |
0C00 - 0C7F |
IsTelugu |
0C80 - 0CFF |
IsKannada |
0D00 - 0D7F |
IsMalayalam |
0D80 - 0DFF |
IsSinhala |
0E00 - 0E7F |
IsThai |
0E80 - 0EFF |
IsLao |
0F00 - 0FFF |
IsTibetan |
1000 - 109F |
IsMyanmar |
10A0 - 10FF |
IsGeorgian |
1100 - 11FF |
IsHangulJamo |
1200 - 137F |
IsEthiopic |
13A0 - 13FF |
IsCherokee |
1400 - 167F |
IsUnifiedCanadianAboriginalSyllabics |
1680 - 169F |
IsOgham |
16A0 - 16FF |
IsRunic |
1700 - 171F |
IsTagalog |
1720 - 173F |
IsHanunoo |
1740 - 175F |
IsBuhid |
1760 - 177F |
IsTagbanwa |
1780 - 17FF |
IsKhmer |
1800 - 18AF |
IsMongolian |
1900 - 194F |
IsLimbu |
1950 - 197F |
IsTaiLe |
19E0 - 19FF |
IsKhmerSymbols |
1D00 - 1D7F |
IsPhoneticExtensions |
1E00 - 1EFF |
IsLatinExtendedAdditional |
1F00 - 1FFF |
IsGreekExtended |
2000 - 206F |
IsGeneralPunctuation |
2070 - 209F |
IsSuperscriptsandSubscripts |
20A0 - 20CF |
IsCurrencySymbols |
20D0 - 20FF |
IsCombiningDiacriticalMarksforSymbols -或- IsCombiningMarksforSymbols |
2100 - 214F |
IsLetterlikeSymbols |
2150 - 218F |
IsNumberForms |
2190 - 21FF |
IsArrows |
2200 - 22FF |
IsMathematicalOperators |
2300 - 23FF |
IsMiscellaneousTechnical |
2400 - 243F |
IsControlPictures |
2440 - 245F |
IsOpticalCharacterRecognition |
2460 - 24FF |
IsEnclosedAlphanumerics |
2500 - 257F |
IsBoxDrawing |
2580 - 259F |
IsBlockElements |
25A0 - 25FF |
IsGeometricShapes |
2600 - 26FF |
IsMiscellaneousSymbols |
2700 - 27BF |
IsDingbats |
27C0 - 27EF |
IsMiscellaneousMathematicalSymbols-A |
27F0 - 27FF |
IsSupplementalArrows-A |
2800 - 28FF |
IsBraillePatterns |
2900 - 297F |
IsSupplementalArrows-B |
2980 - 29FF |
IsMiscellaneousMathematicalSymbols-B |
2A00 - 2AFF |
IsSupplementalMathematicalOperators |
2B00 - 2BFF |
IsMiscellaneousSymbolsandArrows |
2E80 - 2EFF |
IsCJKRadicalsSupplement |
2F00 - 2FDF |
IsKangxiRadicals |
2FF0 - 2FFF |
IsIdeographicDescriptionCharacters |
3000 - 303F |
IsCJKSymbolsandPunctuation |
3040 - 309F |
IsHiragana |
30A0 - 30FF |
IsKatakana |
3100 - 312F |
IsBopomofo |
3130 - 318F |
IsHangulCompatibilityJamo |
3190 - 319F |
IsKanbun |
31A0 - 31BF |
IsBopomofoExtended |
31F0 - 31FF |
IsKatakanaPhoneticExtensions |
3200 - 32FF |
IsEnclosedCJKLettersandMonths |
3300 - 33FF |
IsCJKCompatibility |
3400 - 4DBF |
IsCJKUnifiedIdeographsExtensionA |
4DC0 - 4DFF |
IsYijingHexagramSymbols |
4E00 - 9FFF |
IsCJKUnifiedIdeographs |
A000 - A48F |
IsYiSyllables |
A490 - A4CF |
IsYiRadicals |
AC00 - D7AF |
IsHangulSyllables |
D800 - DB7F |
IsHighSurrogates |
DB80 - DBFF |
IsHighPrivateUseSurrogates |
DC00 - DFFF |
IsLowSurrogates |
E000 - F8FF |
IsPrivateUse |
F900 - FAFF |
IsPrivateUseArea |
FB00 - FB4F |
IsCJKCompatibilityIdeographs |
FB50 - FDFF |
IsAlphabeticPresentationForms |
FE00 - FE0F |
IsArabicPresentationForms-A |
FE20 - FE2F |
IsVariationSelectors |
FE30 - FE4F |
IsCombiningHalfMarks |
FE50 - FE6F |
IsCJKCompatibilityForms |
FE70 - FEFF |
IsSmallFormVariants |
FF00 - FFEF |
IsArabicPresentationForms-B |
FFF0 - FFFF |
IsHalfwidthandFullwidthForms |
字元類別減法
字元類別會定義一組字元,字元類別的減法會產生將某個字元類別中的字元從另一個字元類別中排除之結果的一組字元。
字元類別的減法運算式格式如下:
[base_group-[excluded_group]]
一定要有方括號 ([]) 和連字號 (-)。base_group 是一個正面字元群組或負面字元群組,如字元類別的語法表格中所述。excluded_group 元件是另一個正面字元群組或負面字元群組,或者是另一個字元類別的減法運算式 (也就是說,您可以用巢狀結構方式使用字元類別的減法運算式)。
例如,假設您有一個由 'a' 到 'z' 字元範圍組成的基底群組。若要定義一組由基底群組所組成的字元,其中排除了字元 'm',請使用 [a-z-[m]]。若要定義一組由基底群組所組成的字元,其中排除了 'd'、'j' 和 'p' 字元組,請使用 [a-z-[djp]]。若要定義一組由基底群組所組成的字元,其中排除了從 'm' 到 'p' 的字元範圍,請使用 [a-z-[m-p]]。
請考慮使用巢狀的字元類別減法運算式 [a-z-[d-w-[m-o]]],此運算式會從最內部的字元範圍向外評估。首先,會從字元範圍 'd' 到 'w' 中減去字元範圍 'm' 到 'o',如此會產生從 'd' 到 'l' 以及從 'p' 到 'w' 的字元組。接著會從字元範圍 'a' 到 'z' 中減去該字組,此時會產生字元組 [abcmnoxyz]。
您可以搭配字元類別的減法來使用任何字元類別。若要定義由所有 Unicode 字元 \u0000 到 \uFFFF 組成的字元組,但是不包含空白字元 (\s)、標點符號一般分類內的字元 (\p{P})、IsGreek 具名區塊內的字元 (\p{IsGreek}) 以及 Unicode NEXT LINE 控制字元 (\x85),請使用 [\u0000-\uFFFF-[\s\p{P}\p{IsGreek}\x85]]。
請選擇將會產生有用結果之字元類別減法運算式的字元類別,避免選擇會產生不符合任何字元之空白字元組的運算式或是相當於原始基底群組的運算式。例如,空白的字元組是由運算式 [\p{IsBasicLatin}-[\x00-\x7F]] 產生的結果,此運算式會從 IsBasicLatin 一般分類中減去所有的字元。同樣地,原始的基底群組是由運算式 [a-z-[0-9]] 產生的結果,這是因為字元範圍從字母 'a' 到 'z' 的基底群組未包含排除之群組 (十進位數字 '0' 到 '9' 組成的字元範圍) 內的任何字元。
請注意,XML 結構描述規則運算式對於字元類別減法有類似的支援。