文字クラス

更新 : 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 スキーマの正規表現でも、同様の文字クラス減算がサポートされています。

参照

参照

GetUnicodeCategory

正規表現のオプション

その他の技術情報

正規表現言語要素