字元類別

字元類別代表一組可與輸入字串相符的字元。結合常值 (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 指定之具名區塊內的任何字元 (例如,LlNdZIsGreekIsBoxDrawing)。

\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

(所有控制字元) CcCfCsCoCn

L

(所有字母) LuLlLtLmLo

M

(所有變音符號 (Diacritic) 標記) MnMcMe

N

(所有數字) NdNlNo

P

(所有標點符號) PcPdPsPePiPfPo

S

(所有符號) SmScSkSo

Z

(所有分隔符號) ZsZlZp

支援的具名區塊

下表列出 .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 結構描述規則運算式對於字元類別減法有類似的支援。

請參閱

參考

GetUnicodeCategory
規則運算式選項

其他資源

規則運算式語言項目