문자 클래스
업데이트: 2007년 11월
문자 클래스는 입력 문자열과 일치할 수 있는 문자 집합을 나타냅니다. 리터럴 문자, 이스케이프 문자 및 문자 클래스를 조합하여 정규식 패턴을 만들 수 있습니다.
문자 클래스는 문자 집합을 정의합니다. 일부 문자 클래스는 하나 이상의 유니코드 일반 범주 값이나 유니코드 블록과 같습니다. 유니코드 일반 범주는 광범위한 문자 분류를 정의합니다. 즉, 문자 형식이 문자, 숫자, 구분 기호, 수학 기호, 문장 부호 등인지를 정의합니다. 예를 들어, Lu 일반 범주는 "문자, 대문자"를 나타내고 Sm 범주는 "기호, 수학"을 나타냅니다. 자세한 내용은 지원되는 유니코드 일반 범주를 참조하십시오.
유니코드 블록은 유니코드 코드 포인트의 명명된 범위입니다. .NET Framework에서는 유니코드 블록 이름에서 파생된 명명된 블록 집합을 제공합니다. 예를 들어, .NET Framework에서는 Basic Latin 유니코드 블록에 해당하고 U+0000부터 U+007F까지의 문자를 포함하는 명명된 블록 IsBasicLatin을 제공합니다. 자세한 내용은 지원되는 명명된 블록을 참조하십시오.
.NET Framework에서는 한 문자 클래스에서 다른 문자 클래스를 제외한 결과로 문자 집합을 정의하는 데 사용할 수 있는 문자 클래스 빼기 식을 지원합니다. 자세한 내용은 문자 클래스 빼기를 참조하십시오.
문자 클래스 구문
다음 표에는 문자 클래스와 해당 구문이 요약되어 있습니다.
문자 클래스 |
설명 |
---|---|
[character_group] |
긍정 문자 그룹. 지정한 문자 그룹에 있는 모든 문자를 나타냅니다. 문자 그룹은 하나 이상의 리터럴 문자, 이스케이프 문자, 문자 범위 또는 연결된 문자 클래스로 구성됩니다. 예를 들어, 모든 모음을 지정하려면 [aeiou]를 사용하고, 모든 문장 부호와 10진수 문자를 지정하려면 [\p{P}\d]를 사용합니다. |
[^character_group] |
부정 문자 그룹. 지정한 문자 그룹에 있지 않은 모든 문자를 나타냅니다. 문자 그룹은 하나 이상의 리터럴 문자, 이스케이프 문자, 문자 범위 또는 연결된 문자 클래스로 구성됩니다. 맨 앞의 캐럿 문자(^)는 필수 문자로서, 해당 문자 그룹이 긍정 문자 그룹이 아니라 부정 문자 그룹임을 나타냅니다. 예를 들어, 모음을 제외한 모든 문자를 지정하려면 [^aeiou]를 사용하고, 문장 부호와 10진수 문자를 제외한 모든 문자를 지정하려면 [^\p{P}\d]를 사용합니다. |
[firstCharacter-lastCharacter] |
문자 범위. 문자 범위에 있는 모든 문자를 나타냅니다. 문자 범위는 일련의 문자로서, 문자 범위를 정의하려면 연속된 문자 중 첫 번째 문자와 마지막 문자를 하이픈(-)으로 연결하여 지정합니다. 두 문자의 유니코드 코드 포인트가 연속되면 이 두 문자는 연속된 문자입니다. 두 개 이상의 문자 범위를 연결할 수도 있습니다. 예를 들어, '0'부터 '9'까지의 10진수 범위, 'a'부터 'f'까지의 소문자 범위 및 'A'부터 'F'까지의 대문자 범위를 지정하려면 [0-9a-fA-F]를 사용합니다. |
. |
마침표 문자. \n을 제외한 모든 문자를 나타냅니다. Singleline 옵션으로 수정된 경우 마침표 문자는 임의의 문자를 나타냅니다. 자세한 내용은 정규식 옵션을 참조하십시오. 긍정 또는 부정 문자 그룹의 마침표 문자, 즉 대괄호로 묶은 마침표는 클래스 문자가 아니라 리터럴 마침표 문자로 처리됩니다. |
\p{name} |
유니코드 일반 범주나 name으로 지정된 Ll, Nd, Z, IsGreek, IsBoxDrawing 등의 명명된 블록에 있는 모든 문자를 나타냅니다. |
\P{name} |
유니코드 일반 범주나 name으로 지정된 명명된 블록에 있지 않은 모든 문자를 나타냅니다. |
\w |
단어 문자를 나타냅니다. 유니코드 일반 범주 [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]에 해당합니다. ECMAScript 옵션으로 ECMAScript와 호환되는 동작을 지정한 경우 \w는 [a-zA-Z_0-9]와 같습니다. |
\W |
비단어 문자를 찾습니다. 유니코드 일반 범주 [^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]에 해당합니다. ECMAScript 옵션으로 ECMAScript와 호환되는 동작을 지정한 경우 \W는 [^a-zA-Z_0-9]와 같습니다. |
\s |
공백 문자를 나타냅니다. 이스케이프 시퀀스 및 유니코드 일반 범주 [\f\n\r\t\v\x85\p{Z}]에 해당합니다. ECMAScript 옵션으로 ECMAScript와 호환되는 동작을 지정한 경우 \s는 [ \f\n\r\t\v]와 같습니다. |
\S |
공백 문자가 아닌 문자를 나타냅니다. 이스케이프 시퀀스 및 유니코드 일반 범주 [^\f\n\r\t\v\x85\p{Z}]에 해당합니다. ECMAScript 옵션으로 ECMAScript와 호환되는 동작을 지정한 경우 \S는 [^ \f\n\r\t\v]와 같습니다. |
\d |
10진수를 나타냅니다. 유니코드의 경우 \p{Nd}에 해당하고 ECMAScript 동작인 비 유니코드의 경우 [0-9]에 해당합니다. |
\D |
10진수가 아닌 문자를 나타냅니다. 유니코드의 경우 \P{Nd}에 해당하고 ECMAScript 동작인 비 유니코드의 경우 [^0-9] 에 해당합니다. |
지원되는 유니코드 일반 범주
유니코드는 다음 표에 나와 있는 일반 범주와 설명을 정의합니다. 자세한 내용은 Unicode Character Database의 하위 항목인 "UCD File Format" 및 "General Category Values"를 참조하십시오.
범주 |
설명 |
---|---|
Lu |
문자, 대문자 |
Ll |
문자, 소문자 |
Lt |
문자, 제목 스타일 |
Lm |
문자, 한정자 |
Lo |
문자, 기타 |
Mn |
표시, 공백 없음 |
Mc |
표시, 공백 조합 |
Me |
표시, 묶기 |
Nd |
숫자, 10진수 |
Nl |
숫자, 문자 |
No |
숫자, 기타 |
Pc |
문장 부호, 연결선 |
Pd |
문장 부호, 대시 |
Ps |
문장 부호, 열기 |
Pe |
문장 부호, 닫기 |
Pi |
문장 부호, 처음 따옴표(사용 방식에 따라 Ps 또는 Pe와 같이 동작) |
Pf |
문장 부호, 마지막 따옴표(사용 방식에 따라 Ps 또는 Pe와 같이 동작) |
Po |
문장 부호, 기타 |
Sm |
기호, 수학 |
Sc |
기호, 통화 |
Sk |
기호, 한정자 |
So |
기호, 기타 |
Zs |
구분 기호, 공백 |
Zl |
구분 기호, 줄 |
Zp |
구분 기호, 단락 |
Cc |
기타, 제어 |
Cf |
기타, 서식 |
Cs |
기타, 서로게이트 |
Co |
기타, 전용 항목 |
Cn |
기타, 지정되지 않음(문자에 이 속성 없음) |
.NET Framework에서는 다음 표에서와 같이 유니코드 문자 범주 집합을 나타내는 추가 범주를 제공합니다.
범주 |
내용 |
---|---|
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에서는 다음 표에 나와 있는 명명된 블록을 제공합니다. 지원되는 명명된 블록 집합은 유니코드 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]가 생성됩니다.
모든 문자 클래스에 문자 클래스 빼기를 사용할 수 있습니다. \u0000부터 \uFFFF까지의 문자에서 공백 문자(\s), 문장 부호 일반 범주의 문자(\p{P}), 명명된 블록 IsGreek의 문자(\p{IsGreek}) 및 유니코드 NEXT LINE 제어 문자(\x85)를 제외한 모든 유니코드 문자로 구성된 문자 집합을 정의하려면 [\u0000-\uFFFF-[\s\p{P}\p{IsGreek}\x85]]를 사용합니다.
문자 클래스 빼기 식에 사용할 문자 클래스를 선택할 때는 유용한 결과를 생성할 수 있도록 해야 합니다. 어떤 문자도 나타낼 수 없는 빈 문자 집합을 생성하는 식이나 원래 기본 그룹에 해당하는 식은 사용하지 않습니다. 예를 들어, IsBasicLatin 일반 범주에서 모든 문자를 빼는 [\p{IsBasicLatin}-[\x00-\x7F]] 식을 사용하면 빈 집합이 생성됩니다. 마찬가지로 [a-z-[0-9]] 식을 사용하면 원래 기본 그룹이 생성됩니다. 'a'부터 'z'까지의 문자 범위를 나타내는 기본 그룹에는 제외할 그룹의 문자, 즉 '0'부터 '9'까지의 10진수 문자 범위가 없기 때문입니다.
XML 스키마 정규식에서도 문자 클래스 빼기가 비슷한 방식으로 지원됩니다.