文字クラス
更新 : 2007 年 11 月
文字クラスは、入力文字列と照合する文字のセットを表します。リテラル文字、エスケープ文字、および文字クラスを組み合わせて、正規表現パターンを構成します。
文字クラスは文字のセットを定義します。1 つ以上の Unicode 一般カテゴリ値または Unicode ブロックに相当する文字クラスもあります。Unicode 一般カテゴリは、文字の大まかな分類を定義したものです。つまり、文字を "字" (文字全般から数字や記号などを除いたもので、さまざまな言語の字を指す)、10 進数、区切り記号、数学記号、句読点などに分類します。たとえば、Lu 一般カテゴリは "Letter, Uppercase (字、大文字)" を表し、Sm カテゴリは "Symbol, Math (記号、数学)" を表します。詳細については、「サポートされている Unicode 一般カテゴリ」を参照してください。
Unicode ブロックは、Unicode コード ポイントの名前付き範囲です。.NET Framework には、Unicode ブロックの名前から派生した名前付きブロックのセットが用意されています。たとえば、.NET Framework に用意されている IsBasicLatin 名前付きブロックは、Basic Latin Unicode ブロックに対応し、U+0000 ~ U+007F の範囲の文字を含んでいます。詳細については、「サポートされている名前付きブロック」を参照してください。
.NET Framework は、文字クラスの減算式をサポートしています。これにより、ある文字クラスから別の文字クラスを除外した結果を文字のセットとして定義できます。詳細については、「文字クラス減算」を参照してください。
文字クラスの構文
次の表に、文字クラスとその構文をまとめます。
文字クラス |
説明 |
---|---|
[character_group] |
(文字グループの肯定) 指定した文字グループに含まれる任意の文字に一致します。 この文字グループは、リテラル文字、エスケープ文字、文字範囲、または文字クラスが 1 つ以上連結されて構成されます。 たとえば、すべての母音を指定する場合は [aeiou] を使用し、すべての句読点と 10 進数文字を指定する場合は [\p{P}\d] と指定します。 |
[^character_group] |
(文字グループの否定) 指定した文字グループに含まれていない任意の文字に一致します。 この文字グループは、リテラル文字、エスケープ文字、文字範囲、または文字クラスが 1 つ以上連結されて構成されます。先頭のキャレット文字 (^) は、文字グループが文字グループの肯定ではなく文字グループの否定であることを示し、省略できません。 たとえば、母音を除くすべての文字を指定する場合は [^aeiou] を使用し、句読点と 10 進数文字を除くすべての文字を指定する場合は [^\p{P}\d] を使用します。 |
[firstCharacter-lastCharacter] |
(文字範囲) 文字範囲内にある任意の文字に一致します。 文字範囲は連続する一連の文字で、範囲の最初の文字、ハイフン (-)、および範囲の最後の文字を指定することで定義されます。2 つの文字の Unicode コード ポイントが隣接している場合、それらの文字は連続しています。複数の文字範囲を連結することもできます。 たとえば、"0" ~ "9" の範囲の 10 進数、"a" ~ "f" の範囲の小文字、および "A" ~ "F" の範囲の大文字を指定するには、[0-9a-fA-F] を使用します。 |
. |
(ピリオド文字) \n を除く任意の文字に一致します。Singleline オプションで変更された場合、ピリオド文字は任意の文字に一致します。詳細については、「正規表現のオプション」を参照してください。 文字グループの肯定または文字グループの否定に含まれているピリオド文字 (角かっこで囲まれたピリオド) は、文字クラスではなくリテラルのピリオド文字として扱われます。 |
\p{name} |
name で指定された Unicode 一般カテゴリまたは名前付きブロック内の任意の文字に一致します (たとえば、Ll、Nd、Z、IsGreek、および IsBoxDrawing)。 |
\P{name} |
name で指定された Unicode 一般カテゴリまたは名前付きブロックにない任意の文字に一致します。 |
\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 |
空白文字と一致します。エスケープ シーケンスおよび 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 |
10 進数字と一致します。Unicode の \p{Nd} および ECMAScript の動作である非 Unicode の [0-9] と同じになります。 |
\D |
数字以外と一致します。Unicode の \P{Nd} および ECMAScript の動作である非 Unicode の [^0-9] と同じになります。 |
サポートされている Unicode 一般カテゴリ
Unicode は、次の表に示されている一般カテゴリと説明を定義しています。詳細については、「Unicode Character Database」内の「UCD File Format」および「General Category Values」を参照してください。
カテゴリ |
説明 |
---|---|
Lu |
Letter, Uppercase (字、大文字) |
Ll |
Letter, Lowercase (字、小文字) |
Lt |
Letter, Titlecase (字、タイトル文字) |
Lm |
Letter, Modifier (字、修飾) |
Lo |
Letter, Other (字、その他) |
Mn |
Mark, Nonspacing (結合文字、幅なし) |
Mc |
Mark, Spacing Combining (結合文字、幅あり) |
Me |
Mark, Enclosing (結合文字、囲み) |
Nd |
Number, Decimal Digit (数、10 進数字) |
Nl |
Number, Letter (数、字) |
No |
Number, Other (数、その他) |
Pc |
Punctuation, Connector (句読点、接続) |
Pd |
Punctuation, Dash (句読点、ダッシュ) |
Ps |
Punctuation, Open (句読点、開き) |
Pe |
Punctuation, Close (句読点、閉じ) |
Pi |
Punctuation, Initial quote (句読点、開始引用符。使用状況に応じて Ps または Pe のように動作) |
Pf |
Punctuation, Final quote (句読点、終了引用符。使用状況に応じて Ps または Pe のように動作) |
Po |
Punctuation, Other (句読点、その他) |
Sm |
Symbol, Math (記号、数学) |
Sc |
Symbol, Currency (記号、通貨) |
Sk |
Symbol, Modifier (記号、修飾) |
So |
Symbol, Other (記号、その他) |
Zs |
Separator, Space (区切り、空白) |
Zl |
Separator, Line (区切り、行) |
Zp |
Separator, Paragraph (区切り、段落) |
Cc |
Other, Control (区切り、制御) |
Cf |
Other, Format (その他、書式) |
Cs |
Other, Surrogate (その他、サロゲート) |
Co |
Other, Private Use (その他、プライベート用途) |
Cn |
Other, Not Assigned (その他、未割り当て。このプロパティを持つ文字はありません) |
.NET Framework には、次の表に示す Unicode 文字カテゴリのセットを表す追加のカテゴリが用意されています。
カテゴリ |
説明 |
---|---|
C |
(すべての制御文字) Cc、Cf、Cs、Co、および Cn |
L |
(すべての字) Lu、Ll、Lt、Lm、および Lo |
M |
(すべての分音記号) 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]]] について考えてみます。この式は、最も内部の文字範囲から順に外側へと評価されます。まず、"m" ~ "o" の文字範囲が "d" ~ "w" の文字範囲から減算されて、"d" ~ "l" および "p" ~ "w" の文字セットが生成されます。さらにこのセットが "a" ~ "z" の文字範囲から減算されて、[abcmnoxyz] という文字セットが生成されます。
文字クラス減算では、任意の文字クラスを使用できます。\u0000 ~ \uFFFF の Unicode 文字から空白文字 (\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" という 10 進数字の文字範囲から成る除外対象グループ内の文字が含まれないためです。
XML スキーマの正規表現でも、同様の文字クラス減算がサポートされています。