다음을 통해 공유


문자 클래스

업데이트: 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 스키마 정규식에서도 문자 클래스 빼기가 비슷한 방식으로 지원됩니다.

참고 항목

참조

GetUnicodeCategory

정규식 옵션

기타 리소스

정규식 언어 요소