문자 클래스
문자 클래스는 문자 집합을 정의하며, 이 중 하나가 입력 문자열에서 발생하면 일치하는 것으로 판정할 수 있습니다. .NET Framework의 정규식 언어는 다음 문자 클래스를 지원합니다.
긍정 문자 그룹. 입력 문자열의 문자는 지정된 문자 집합 중 하나와 일치해야 합니다. 자세한 내용은 긍정 문자 그룹을 참조하십시오.
부정 문자 그룹. 입력 문자열의 문자는 지정된 문자 집합 중 하나와 일치해서는 안 됩니다. 자세한 내용은 부정 문자 그룹을 참조하십시오.
단일 문자. 정규식의 .(점 또는 마침표) 문자는 \n을 제외한 모든 문자와 일치하는 와일드카드 문자입니다. 자세한 내용은 단일 문자를 참조하십시오.
일반 유니코드 범주 또는 명명된 블록입니다. 입력 문자열의 문자는 일치하는 것으로 판정하려면 특정 유니코드 범주의 멤버이거나 유니코드 문자의 연속된 범위 내에 있어야 합니다. 자세한 내용은 음수 범주 또는 유니코드 블록을 참조하십시오.
음수 일반 유니코드 범주 또는 명명된 블록입니다. 입력 문자열의 문자는 일치하는 것으로 판정하려면 특정 유니코드 범주의 멤버가 아니거나 유니코드 문자의 연속된 범위 내에 있어서는 안 됩니다. 자세한 내용은 네거티브 유니코드 범주 또는 유니코드 블록 음수 유니코드 범주 또는 유니코드 블록을 참조하십시오.
단어 문자입니다. 입력 문자열의 문자는 단어에 있는 문자에 적합한 유니코드 범주에 속할 수 있습니다. 자세한 내용은 단어 문자를 참조하십시오.
비단어 문자입니다. 입력 문자열의 문자는 단어 문자가 아닌 유니코드 범주에 속할 수 있습니다. 자세한 내용은 비단어 문자를 참조하십시오.
하나의 공백 문자. 입력 문자열의 문자는 유니코드 구분 문자 뿐만 아니라 많은 제어 문자 중 하나가 될 수 있습니다. 자세한 내용은 공백 문자를 참조하십시오.
공백이 아닌 모든 문자 입력 문자열의 문자는 공백 문자가 아닌 문자를 사용할 수 있습니다. 자세한 내용은 공백이 아닌 모든 문자를 참조하십시오.
10진수입니다. 입력 문자열의 문자는 유니코드 10진 자릿수로 분류된 모든 문자가 될 수 있습니다. 자세한 내용은 10진수 숫자 문자를 참조하십시오.
10진수가 아닙니다. 입력 문자열의 문자는 유니코드 10진수 이외의 문자는 모두 사용할 수 있습니다. 자세한 내용은 10진수 숫자 문자를 참조하십시오.
.NET Framework에서는 한 문자 클래스에서 다른 문자 클래스를 제외한 결과로 문자 집합을 정의하는 데 사용할 수 있는 문자 클래스 빼기 식을 지원합니다. 자세한 내용은 문자 클래스 빼기를 참조하십시오.
긍정 문자 그룹: [ ]
긍정 문자 그룹은 일치 항목으로 간주되려면 입력 문자열에 나타날 수 있는 문자 목록을 지정합니다. 이 문자 목록은 개별적으로 범위로, 또는 둘 다 지정할 수 있습니다.
개별 문자 목록을 지정하는 구문은 다음과 같습니다.
[character_group]
character_group은 일치가 성공하려면 입력 문자열에 나타날 수 있는 개별 문자 목록입니다. character_group은 하나 이상의 리터럴 문자, 이스케이프 문자 또는 문자 클래스의 조합으로 구성될 수 있습니다.
문자의 범위를 지정하는 구문은 다음과 같습니다.
[firstCharacter-lastCharacter]
firstCharacter는 범위를 시작하는 문자이고 lastCharacter는 범위를 끝내는 문자입니다. 문자 범위는 일련의 문자로서, 문자 범위를 정의하려면 연속된 문자 중 첫 번째 문자와 마지막 문자를 하이픈(-)으로 연결하여 지정합니다. 두 문자의 유니코드 코드 포인트가 연속되면 이 두 문자는 연속된 문자입니다.
긍정 문자 클래스가 포함된 몇 가지 일반적인 정규식 패턴은 다음과 같습니다.
패턴 |
설명 |
---|---|
[aeiou] |
모든 모음을 찾습니다. |
[\p{P}\d] |
모든 문장 부호 및 10진수 문자를 찾습니다. |
[\s\p{P}] |
모든 공백 및 문장 부호를 찾습니다. |
다음 예제에서는 입력 문자열이 문자 "grey" 또는 "gray"에 이어 일치할 다른 일치 단어를 포함하도록 단어 "a"와 "e"가 포함된 긍정 문자 그룹을 정의합니다.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "gr[ae]y\s\S+?[\s|\p{P}]"
Dim input As String = "The gray wolf jumped over the grey wall."
Dim matches As MatchCollection = Regex.Matches(input, pattern)
For Each match As Match In matches
Console.WriteLine(match.Value)
Next
End Sub
End Module
' The example displays the following output:
' gray wolf
' grey wall.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"gr[ae]y\s\S+?[\s|\p{P}]";
string input = "The gray wolf jumped over the grey wall.";
MatchCollection matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
Console.WriteLine(match.Value);
}
}
// The example displays the following output:
// gray wolf
// grey wall.
정규식 gr[ae]y\s\S+?[\s|\p{P}]은 다음과 같이 정의됩니다.
패턴 |
설명 |
---|---|
gr |
리터럴 문자 "gr"을 찾습니다. |
[ae] |
"a" 또는 "e"를 찾습니다. |
y\s |
리터럴 문자 y 다음에 공백 문자를 찾습니다. |
\S+? |
하나 이상의 공백이 아닌 문자이지만 가능한 적은 문자를 찾습니다. |
[\s|\p{P}] |
공백 문자 또는 문장 부호를 찾습니다. |
다음 예제에서는 모든 대문자로 시작하는 단어를 찾습니다. A-Z의 대문자로 범위를 나타내기 위해 [A-Z] 하위 식을 사용합니다.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b[A-Z]\w*\b"
Dim input As String = "A city Albany Zulu maritime Marseilles"
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine(match.Value)
Next
End Sub
End Module
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b[A-Z]\w*\b";
string input = "A city Albany Zulu maritime Marseilles";
foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine(match.Value);
}
}
// The example displays the following output:
// A
// Albany
// Zulu
// Marseilles
\b[A-Z]\w*\b 정규식은 다음 표에서와 같이 정의됩니다.
패턴 |
설명 |
---|---|
\b |
단어 경계를 시작합니다. |
[A-Z] |
A-Z의 대문자를 모두 찾습니다. |
\w* |
0개 이상의 단어 문자를 일치시킵니다. |
\b |
단어 경계를 찾습니다. |
맨 위로 이동
부정 문자 그룹: [^]
부정 문자 그룹은 일치 항목으로 간주되려면 입력 문자열에 나타나서는 안 되는 문자 목록을 지정합니다. 문자 목록은 개별적으로 범위로, 또는 둘 다 지정할 수 있습니다.
개별 문자 목록을 지정하는 구문은 다음과 같습니다.
[^character_group]
character_group은 일치가 성공하려면 입력 문자열에 나타날 수 없는 개별 문자 목록입니다. character_group은 하나 이상의 리터럴 문자, 이스케이프 문자 또는 문자 클래스의 조합으로 구성될 수 있습니다.
문자의 범위를 지정하는 구문은 다음과 같습니다.
[^firstCharacter-lastCharacter]
firstCharacter는 범위를 시작하는 문자이고 lastCharacter는 범위를 끝내는 문자입니다. 문자 범위는 일련의 문자로서, 문자 범위를 정의하려면 연속된 문자 중 첫 번째 문자와 마지막 문자를 하이픈(-)으로 연결하여 지정합니다. 두 문자의 유니코드 코드 포인트가 연속되면 이 두 문자는 연속된 문자입니다.
두 개 이상의 문자 범위를 연결할 수도 있습니다. 예를 들어, "0"부터 "9"까지의 10진수 범위, "a"부터 "f"까지의 소문자 범위 및 "A"부터 "F"까지의 대문자 범위를 지정하려면 [0-9a-fA-F]를 사용합니다.
부정 문자 그룹에서 맨 앞의 캐럿 문자(^)는 필수 문자로서, 해당 문자 그룹이 긍정 문자 그룹이 아니라 부정 문자 그룹임을 나타냅니다.
중요 |
---|
큰 정규식 패턴에서 부정 문자 그룹은 너비가 0인 어설션이 아닙니다.즉, 부정 문자 그룹을 평가한 후 정규식 엔진은 입력 문자열에서 한 문자를 이동합니다. |
부정 문자 그룹이 포함된 몇 가지 일반적인 정규식 패턴은 다음과 같습니다.
패턴 |
설명 |
---|---|
[^aeiou] |
모음을 제외한 모든 문자를 찾습니다. |
[^\p{P}\d] |
문장 부호 및 10진수 문자를 제외한 모든 문자를 찾습니다. |
다음 예제에서는 "th 문자로 시작하고 이어서 "o"가 나오지 않는 단어를 찾습니다.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\bth[^o]\w+\b"
Dim input As String = "thought thing though them through thus " + _
"thorough this"
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine(match.Value)
Next
End Sub
End Module
' The example displays the following output:
' thing
' them
' through
' thus
' this
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\bth[^o]\w+\b";
string input = "thought thing though them through thus thorough this";
foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine(match.Value);
}
}
// The example displays the following output:
// thing
// them
// through
// thus
// this
\bth[^o]\w+\b 정규식은 다음 표에서와 같이 정의됩니다.
패턴 |
설명 |
---|---|
\b |
단어 경계를 시작합니다. |
th |
리터럴 문자 "th"를 찾습니다. |
[^o] |
"o"가 아닌 모든 문자를 찾습니다. |
\w+ |
둘 이상의 단어 문자를 찾습니다. |
\b |
단어 경계를 종료합니다. |
맨 위로 이동
단일 문자: .
마침표 문자(.)는 \n(줄바꿈 문자, \u000A)를 제외하고 다음 두 한정자가 있는 모든 문자를 찾습니다:
정규식 패턴이 RegexOptions.Singleline 옵션에 의해 수정되거나 . 문자 클래스를 포함하는 패턴의 일부가 s 옵션에 의해 수정되는 경우 .가 문자를 일치시킵니다. 자세한 내용은 정규식 옵션을 참조하십시오.
다음 예제에서는 기본 및 . 옵션으로 RegexOptions.Singleline 문자 클래스의 다른 동작을 보여 줍니다. 정규식 ^.+은 문자열의 시작 부분에서 시작하여 모든 문자를 찾습니다. 기본적으로 일치는 첫째 줄 끝에서 끝납니다. 정규식 패턴은 캐리지 리턴 문자, \r 또는 \u000D과 일치하지만 \n와는 일치하지 않습니다. RegexOptions.Singleline 옵션은 한 줄로 전체 입력 문자열을 해석하기 때문에 \n을 포함하여 입력 문자열의 모든 문자를 일치시킵니다.
Imports System.Text.RegularExpressions Module Example Public Sub Main() Dim pattern As String = "^.+" Dim input As String = "This is one line and" + vbCrLf + "this is the second." For Each match As Match In Regex.Matches(input, pattern) Console.WriteLine(Regex.Escape(match.Value)) Next Console.WriteLine() For Each match As Match In Regex.Matches(input, pattern, RegexOptions.SingleLine) Console.WriteLine(Regex.Escape(match.Value)) Next End Sub End Module ' The example displays the following output: ' This\ is\ one\ line\ and\r ' ' This\ is\ one\ line\ and\r\nthis\ is\ the\ second\.
using System; using System.Text.RegularExpressions; public class Example { public static void Main() { string pattern = "^.+"; string input = "This is one line and" + Environment.NewLine + "this is the second."; foreach (Match match in Regex.Matches(input, pattern)) Console.WriteLine(Regex.Escape(match.Value)); Console.WriteLine(); foreach (Match match in Regex.Matches(input, pattern, RegexOptions.Singleline)) Console.WriteLine(Regex.Escape(match.Value)); } } // The example displays the following output: // This\ is\ one\ line\ and\r // // This\ is\ one\ line\ and\r\nthis\ is\ the\ second\.
참고 |
---|
\n을 제외한 모든 문자와 일치하기 때문에 . 문자 집합이 \r(캐리지 리턴 문자, \u000D)과 일치합니다. |
긍정 또는 부정 문자 그룹의 마침표는 문자 클래스가 아니라 리터럴 마침표 문자로 처리됩니다. 자세한 내용은 이 항목 앞부분의 긍정 문자 그룹 및 부정 문자 그룹을 참조하십시오. 다음 예제는 문자 클래스와 긍정 문자 그룹으로 마침표 문자(.)를 포함하는 정규식을 정의하는 그림을 제공합니다. 정규식 \b.*[.?!;:](\s|\z)은 단어 경계에서 시작하여 마침표를 포함하여 네 가지 문장 부호 중 하나와 만날 때까지 임의의 문자를 찾은 다음 공백 문자 또는 문자열 끝을 찾습니다.
Imports System.Text.RegularExpressions Module Example Public Sub Main() Dim pattern As STring = "\b.*[.?!;:](\s|\z)" Dim input As String = "this. what: is? go, thing." For Each match As Match In Regex.Matches(input, pattern) Console.WriteLine(match.Value) Next End Sub End Module ' The example displays the following output: ' this. what: is? go, thing.
using System; using System.Text.RegularExpressions; public class Example { public static void Main() { string pattern = @"\b.*[.?!;:](\s|\z)"; string input = "this. what: is? go, thing."; foreach (Match match in Regex.Matches(input, pattern)) Console.WriteLine(match.Value); } } // The example displays the following output: // this. what: is? go, thing.
참고 |
---|
모든 문자와 일치하기 때문에 . 언어 요소는 정규식 패턴이 여러 번 임의의 문자와 일치하도록 시도할 경우 종종 지연 수량자와 함께 사용됩니다.자세한 내용은 수량자을 참조하십시오. |
맨 위로 이동
유니코드 범주 또는 유니코드 블록: \p{}
유니코드 표준에서는 각 문자를 일반 범주에 할당합니다. 예를 들어, 특정 문자는 대문자(Lu 범주별로 표현), 10진수( Nd 범주), 수학 기호( Sm 범주) 또는 단락 구분 기호( Zl 범주)가 될 수 있습니다. 유니코드 표준의 특정 문자 집합이 특정 범위 또는 연속된 코드 포인트의 블록도 차지합니다. 예를 들어, 기본 라틴 문자 집합은 \u0000부터 \u007F까지에서 발견되고, 아랍어 문자 집합이 \u0600부터 \u06FF까지에서 발견됩니다.
정규식 만들기
\p{name}
유니코드 일반 범주 또는 명명된 블록에 속하는 모든 문자를 일치하십시오. 여기서 이름은 범주 약어 또는 명명된 블록 이름입니다. 범주 약어 목록은 지원되는 유니코드 일반 범주를 참조하십시오. 명명된 블록은 지원되는 명명된 블록을 참조하십시오.
다음 예제에서는 \p{name} 구문을 사용하여 유니코드 일반 범주(이 경우 Pd 또는 문장 부호, 대시 범주) 및 명명된 블록(IsGreek 및 IsBasicLatin 명명된 블록)을 모두 찾습니다.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b(\p{IsGreek}+(\s)?)+\p{Pd}\s(\p{IsBasicLatin}+(\s)?)+"
Dim input As String = "Κατα Μαθθαίον - The Gospel of Matthew"
Console.WriteLine(Regex.IsMatch(input, pattern)) ' Displays True.
End Sub
End Module
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b(\p{IsGreek}+(\s)?)+\p{Pd}\s(\p{IsBasicLatin}+(\s)?)+";
string input = "Κατα Μαθθαίον - The Gospel of Matthew";
Console.WriteLine(Regex.IsMatch(input, pattern)); // Displays True.
}
}
\b(\p{IsGreek}+(\s)?)+\p{Pd}\s(\p{IsBasicLatin}+(\s)?)+ 정규식은 다음 표에서와 같이 정의됩니다.
패턴 |
설명 |
---|---|
\b |
단어 경계를 시작합니다. |
\p{IsGreek}+ |
둘 이상의 그리스어 문자를 찾습니다. |
(\s)? |
0번 이상 나오는 공백 문자를 찾습니다. |
(\p{IsGreek}+(\s)?)+ |
하나 이상의 그리스 문자 다음에 0개 또는 1개의 공백 문자가 한 번 이상 나타나는 패턴을 일치하십시오. |
\p{Pd} |
문장 부호, 대시 문자를 찾습니다. |
\s |
공백 문자를 찾습니다. |
\p{IsBasicLatin}+ |
하나 이상의 기본 라틴 문자를 찾습니다. |
(\s)? |
0번 이상 나오는 공백 문자를 찾습니다. |
(\p{IsBasicLatin}+(\s)?)+ |
하나 이상의 기본 라틴 문자 다음에 0개 또는 1개의 공백 문자가 한 번 이상 나타나는 패턴을 일치하십시오. |
맨 위로 이동
음수 유니코드 범주 또는 유니코드 블록: \P{}
유니코드 표준에서는 각 문자를 일반 범주에 할당합니다. 예를 들어, 특정 문자는 대문자(Lu 범주별로 표현), 10진수( Nd 범주), 수학 기호( Sm 범주) 또는 단락 구분 기호( Zl 범주)가 될 수 있습니다. 유니코드 표준의 특정 문자 집합이 특정 범위 또는 연속된 코드 포인트의 블록도 차지합니다. 예를 들어, 기본 라틴 문자 집합은 \u0000부터 \u007F까지에서 발견되고, 아랍어 문자 집합이 \u0600부터 \u06FF까지에서 발견됩니다.
정규식 만들기
\P{name}
유니코드 일반 범주 또는 명명된 블록에 속하지 않는 모든 문자를 일치하십시오. 여기서 이름은 범주 약어 또는 명명된 블록 이름입니다. 범주 약어 목록은 지원되는 유니코드 일반 범주를 참조하십시오. 명명된 블록은 지원되는 명명된 블록을 참조하십시오.
다음 예제에서는 \P{name} 구문을 사용하여 숫자 문자열에서 모든 통화 기호(이 경우, Sc 또는 기호, 통화 범주)를 제거합니다.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "(\P{Sc})+"
Dim values() As String = { "$164,091.78", "£1,073,142.68", "73¢", "€120"}
For Each value As String In values
Console.WriteLine(Regex.Match(value, pattern).Value)
Next
End Sub
End Module
' The example displays the following output:
' 164,091.78
' 1,073,142.68
' 73
' 120
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"(\P{Sc})+";
string[] values = { "$164,091.78", "£1,073,142.68", "73¢", "€120" };
foreach (string value in values)
Console.WriteLine(Regex.Match(value, pattern).Value);
}
}
// The example displays the following output:
// 164,091.78
// 1,073,142.68
// 73
// 120
정규식 패턴 (\P{Sc})+는 통화 기호가 아닌 하나 이상의 문자를 찾습니다. 결과 문자열에서 모든 통화 기호를 효과적으로 제거합니다.
맨 위로 이동
단어 문자: \w
\w는 단어 문자를 나타냅니다. 단어 문자는 다음 표에 나열된 유니코드 범주의 멤버입니다.
범주 |
설명 |
---|---|
Ll |
문자, 소문자 |
Lu |
문자, 대문자 |
Lt |
문자, 제목 스타일 |
Lo |
문자, 기타 |
Lm |
문자, 한정자 |
Nd |
숫자, 10진수 |
Pc |
문장 부호, 연결자 이 범주는 가장 일반적으로 사용되는 LOWLINE 문자 (_), U + 005F인 10개의 문자를 포함합니다. |
ECMAScript와 호환되는 동작을 지정한 경우 \w는 [a-zA-Z_0-9]와 같습니다. ECMAScript 정규식에 대한 자세한 내용은 정규식 옵션의 "ECMAScript 일치 동작" 섹션을 참조하십시오.
참고 |
---|
모든 단어 문자와 일치하기 때문에 \w 언어 요소는 정규식 패턴이 특정 비단어 문자에 이어 여러 번 임의의 단어 문자와 일치하도록 시도할 경우 종종 지연 수량자와 함께 사용됩니다.자세한 내용은 수량자을 참조하십시오. |
다음 예제에서는 \w 언어 요소를 사용하여 단어의 중복 문자를 찾습니다. 예제는 다음과 같이 해석될 수 있는 정규식 패턴 (\w)\1을 정의합니다.
요소 |
설명 |
---|---|
/w |
단어 문자를 찾습니다. 이 그룹은 첫 번째 캡처링 그룹입니다. |
\1 |
첫 번째 캡처의 값을 찾습니다. |
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "(\w)\1"
Dim words() As String = { "trellis", "seer", "latter", "summer", _
"hoarse", "lesser", "aardvark", "stunned" }
For Each word As String In words
Dim match As Match = Regex.Match(word, pattern)
If match.Success Then
Console.WriteLine("'{0}' found in '{1}' at position {2}.", _
match.Value, word, match.Index)
Else
Console.WriteLine("No double characters in '{0}'.", word)
End If
Next
End Sub
End Module
' The example displays the following output:
' 'll' found in 'trellis' at position 3.
' 'ee' found in 'seer' at position 1.
' 'tt' found in 'latter' at position 2.
' 'mm' found in 'summer' at position 2.
' No double characters in 'hoarse'.
' 'ss' found in 'lesser' at position 2.
' 'aa' found in 'aardvark' at position 0.
' 'nn' found in 'stunned' at position 3.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"(\w)\1";
string[] words = { "trellis", "seer", "latter", "summer",
"hoarse", "lesser", "aardvark", "stunned" };
foreach (string word in words)
{
Match match = Regex.Match(word, pattern);
if (match.Success)
Console.WriteLine("'{0}' found in '{1}' at position {2}.",
match.Value, word, match.Index);
else
Console.WriteLine("No double characters in '{0}'.", word);
}
}
}
// The example displays the following output:
// 'll' found in 'trellis' at position 3.
// 'ee' found in 'seer' at position 1.
// 'tt' found in 'latter' at position 2.
// 'mm' found in 'summer' at position 2.
// No double characters in 'hoarse'.
// 'ss' found in 'lesser' at position 2.
// 'aa' found in 'aardvark' at position 0.
// 'nn' found in 'stunned' at position 3.
맨 위로 이동
비단어 문자: \W
\W는 비단어 문자를 찾습니다. \W 언어 요소는 다음 문자 클래스에 해당합니다.
[^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]
즉, 다음 표에 나열된 문자를 제외한 모든 문자와 일치합니다.
범주 |
설명 |
---|---|
Ll |
문자, 소문자 |
Lu |
문자, 대문자 |
Lt |
문자, 제목 스타일 |
Lo |
문자, 기타 |
Lm |
문자, 한정자 |
Nd |
숫자, 10진수 |
Pc |
문장 부호, 연결자 이 범주는 가장 일반적으로 사용되는 LOWLINE 문자 (_), U + 005F인 10개의 문자를 포함합니다. |
ECMAScript와 호환되는 동작을 지정한 경우 \W는 [^a-zA-Z_0-9]와 같습니다. ECMAScript 정규식에 대한 자세한 내용은 정규식 옵션의 "ECMAScript 일치 동작" 섹션을 참조하십시오.
참고 |
---|
모든 비단어 문자와 일치하기 때문에 \W 언어 요소는 정규식 패턴이 특정 비단어 문자에 이어 여러 번 임의의 비단어 문자와 일치하도록 시도할 경우 종종 지연 수량자와 함께 사용됩니다.자세한 내용은 수량자을 참조하십시오. |
다음 예제에서는 \w 문자 클래스를 보여 줍니다. 공백 또는 문장 부호 같은 하나 이상의 비단어 문자가 따라오는 단어에 일치하는 정규식 패턴 \b(\w+)(\W){1,2}을 정의합니다. 정규식은 다음 표와 같이 해석됩니다.
요소 |
설명 |
---|---|
\b |
단어 경계에서 일치 항목 찾기를 시작합니다. |
(\w+) |
둘 이상의 단어 문자를 찾습니다. 이 그룹은 첫 번째 캡처링 그룹입니다. |
(\w){1,2} |
단어가 아닌 문자를 한 개 또는 두 개 찾습니다. 이 그룹은 두 번째 캡처링 그룹입니다. |
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b(\w+)(\W){1,2}"
Dim input As String = "The old, grey mare slowly walked across the narrow, green pasture."
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine(match.Value)
Console.Write(" Non-word character(s):")
Dim captures As CaptureCollection = match.Groups(2).Captures
For ctr As Integer = 0 To captures.Count - 1
Console.Write("'{0}' (\u{1}){2}", captures(ctr).Value, _
Convert.ToUInt16(captures(ctr).Value.Chars(0)).ToString("X4"), _
If(ctr < captures.Count - 1, ", ", ""))
Next
Console.WriteLine()
Next
End Sub
End Module
' The example displays the following output:
' The
' Non-word character(s):' ' (\u0020)
' old,
' Non-word character(s):',' (\u002C), ' ' (\u0020)
' grey
' Non-word character(s):' ' (\u0020)
' mare
' Non-word character(s):' ' (\u0020)
' slowly
' Non-word character(s):' ' (\u0020)
' walked
' Non-word character(s):' ' (\u0020)
' across
' Non-word character(s):' ' (\u0020)
' the
' Non-word character(s):' ' (\u0020)
' narrow,
' Non-word character(s):',' (\u002C), ' ' (\u0020)
' green
' Non-word character(s):' ' (\u0020)
' pasture.
' Non-word character(s):'.' (\u002E)
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b(\w+)(\W){1,2}";
string input = "The old, grey mare slowly walked across the narrow, green pasture.";
foreach (Match match in Regex.Matches(input, pattern))
{
Console.WriteLine(match.Value);
Console.Write(" Non-word character(s):");
CaptureCollection captures = match.Groups[2].Captures;
for (int ctr = 0; ctr < captures.Count; ctr++)
Console.Write(@"'{0}' (\u{1}){2}", captures[ctr].Value,
Convert.ToUInt16(captures[ctr].Value[0]).ToString("X4"),
ctr < captures.Count - 1 ? ", " : "");
Console.WriteLine();
}
}
}
// The example displays the following output:
// The
// Non-word character(s):' ' (\u0020)
// old,
// Non-word character(s):',' (\u002C), ' ' (\u0020)
// grey
// Non-word character(s):' ' (\u0020)
// mare
// Non-word character(s):' ' (\u0020)
// slowly
// Non-word character(s):' ' (\u0020)
// walked
// Non-word character(s):' ' (\u0020)
// across
// Non-word character(s):' ' (\u0020)
// the
// Non-word character(s):' ' (\u0020)
// narrow,
// Non-word character(s):',' (\u002C), ' ' (\u0020)
// green
// Non-word character(s):' ' (\u0020)
// pasture.
// Non-word character(s):'.' (\u002E)
두 번째 캡처링 그룹의 Group 개체가 단일 캡처된 비단어 문자만 포함하기 때문에 예제에서는 Group.Captures 속성에 의해 반환되는 CaptureCollection 개체에서 모든 캡처된 비단어 문자를 검색합니다.
맨 위로 이동
하나의 공백 문자: \s
\s는 공백 문자를 나타냅니다. 다음 표에 나열된 이스케이프 시퀀스 및 유니코드 범주와 동일합니다.
범주 |
설명 |
---|---|
\f |
용지 공급 문자, \u000C. |
\n |
줄 바꿈 문자, \u000A. |
\r |
캐리지 리턴 문자 \u000D입니다. |
\t |
탭 문자, \u0009. |
\v |
세로 탭 문자, \u000B. |
\x85 |
줄임표 또는 NEXT LINE (NEL) 문자 (…), \u0085. |
\p{Z} |
모든 구분 기호 문자를 찾습니다. |
ECMAScript와 호환되는 동작을 지정한 경우 \s는 [\f\n\r\t\v]와 같습니다. ECMAScript 정규식에 대한 자세한 내용은 정규식 옵션의 "ECMAScript 일치 동작" 섹션을 참조하십시오.
다음 예제에서는 \s 문자 클래스를 보여 줍니다. "s" 또는 "es" 뒤에는 공백 문자 또는 입력 문자열의 끝에서 끝나는 단어에 일치하는 정규식 패턴 \b\w+(e)*s(\s|$)을 정의합니다. 정규식은 다음 표와 같이 해석됩니다.
요소 |
설명 |
---|---|
\b |
단어 경계에서 일치 항목 찾기를 시작합니다. |
\w+ |
둘 이상의 단어 문자를 찾습니다. |
(e)* |
"e"를 0개 또는 한 개 찾습니다. |
s |
"s"를 찾습니다. |
(\s|$) |
공백 문자 또는 입력 문자열의 끝을 찾습니다. |
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b\w+(e)*s(\s|$)"
Dim input As String = "matches stores stops leave leaves"
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine(match.Value)
Next
End Sub
End Module
' The example displays the following output:
' matches
' stores
' stops
' leaves
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b\w+(e)*s(\s|$)";
string input = "matches stores stops leave leaves";
foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine(match.Value);
}
}
// The example displays the following output:
// matches
// stores
// stops
// leaves
맨 위로 이동
공백이 아닌 모든 문자: \S
\S는 공백이 아닌 문자를 찾습니다. [^\f\n\r\t\v\x85\p{Z}] 정규식 패턴과 동일하거나 공백 문자를 일치하는 \s과 동일한 정규식 패턴과 반대입니다. 자세한 내용은 공백 문자: \s를 참조하십시오.
ECMAScript와 호환되는 동작을 지정한 경우 \S는 [^ \f\n\r\t\v]와 같습니다. ECMAScript 정규식에 대한 자세한 내용은 정규식 옵션의 "ECMAScript 일치 동작" 섹션을 참조하십시오.
다음 예제에서는 \S 언어 요소를 보여 줍니다. 정규식 패턴 \b(\S+)\s*는 공백 문자로 구분되는 문자열을 찾습니다. 일치 GroupCollection 개체의 두 번째 요소는 일치하는 문자열을 포함합니다. 정규식은 다음 표와 같이 해석될 수 있습니다.
요소 |
설명 |
---|---|
\b |
단어 경계에서 일치 항목 찾기를 시작합니다. |
(\S+) |
하나 이상의 공백이 아닌 문자를 찾습니다. 이 그룹은 첫 번째 캡처링 그룹입니다. |
\s* |
0번 이상 나오는 공백 문자를 찾습니다. |
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b(\S+)\s*"
Dim input As String = "This is the first sentence of the first paragraph. " + _
"This is the second sentence." + vbCrLf + _
"This is the only sentence of the second paragraph."
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine(match.Groups(1))
Next
End Sub
End Module
' The example displays the following output:
' This
' is
' the
' first
' sentence
' of
' the
' first
' paragraph.
' This
' is
' the
' second
' sentence.
' This
' is
' the
' only
' sentence
' of
' the
' second
' paragraph.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b(\S+)\s*";
string input = "This is the first sentence of the first paragraph. " +
"This is the second sentence.\n" +
"This is the only sentence of the second paragraph.";
foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine(match.Groups[1]);
}
}
// The example displays the following output:
// This
// is
// the
// first
// sentence
// of
// the
// first
// paragraph.
// This
// is
// the
// second
// sentence.
// This
// is
// the
// only
// sentence
// of
// the
// second
// paragraph.
맨 위로 이동
10진수 숫자 문자: \d
\d는 10진수를 나타냅니다. 많은 다른 문자 집합의 10진수 뿐만 아니라 표준 10진수 0-9를 포함하는 \p{Nd} 정규식 패턴과 동일합니다.
ECMAScript와 호환되는 동작을 지정한 경우 \d는 [0-9]와 같습니다. ECMAScript 정규식에 대한 자세한 내용은 정규식 옵션의 "ECMAScript 일치 동작" 섹션을 참조하십시오.
다음 예제에서는 \d 언어 요소를 보여 줍니다. 입력 문자열이 미국 및 캐나다의 올바른 전화 번호를 나타내는지 여부를 테스트합니다. ^(\(*\d{3}\)*[\s-])*\d{3}-\d{4}$ 정규식 패턴은 다음 표에서와 같이 정의됩니다.
요소 |
설명 |
---|---|
^ |
입력 문자열의 시작 부분에서 일치 항목 찾기를 시작합니다. |
\(* |
0개 또는 한 개의 리터럴 "(" 문자를 찾습니다. |
\d{3} |
세 개의 10진수를 찾습니다. |
\)* |
0개 또는 한 개의 리터럴 ")" 문자를 찾습니다. |
[\s-] |
하이픈 또는 공백 문자를 찾습니다. |
(\(*\d{3}\)*[\s-])* |
옵션 여는 괄호에 이어 세 개의 10진수, 옵션 닫는 괄호 및 공백 문자나 하이픈 0개 또는 1개를 일치시킵니다. 이 그룹은 첫 번째 캡처링 그룹입니다. |
\d{3}=\d{4} |
세 개의 10진수, 하이픈, 네 개 이상의 10진수를 찾습니다. |
$ |
입력 문자열의 끝 부분을 찾습니다. |
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "^(\(*\d{3}\)*[\s-])*\d{3}-\d{4}$"
Dim inputs() As String = { "111 111-1111", "222-2222", "222 333-444", _
"(212) 111-1111", "111-AB1-1111", _
"212-111-1111", "01 999-9999" }
For Each input As String In inputs
If Regex.IsMatch(input, pattern) Then
Console.WriteLine(input + ": matched")
Else
Console.WriteLine(input + ": match failed")
End If
Next
End Sub
End Module
' The example displays the following output:
' 111 111-1111: matched
' 222-2222: matched
' 222 333-444: match failed
' (212) 111-1111: matched
' 111-AB1-1111: match failed
' 212-111-1111: matched
' 01 999-9999: match failed
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"^(\(*\d{3}\)*[\s-])*\d{3}-\d{4}$";
string[] inputs = { "111 111-1111", "222-2222", "222 333-444",
"(212) 111-1111", "111-AB1-1111",
"212-111-1111", "01 999-9999" };
foreach (string input in inputs)
{
if (Regex.IsMatch(input, pattern))
Console.WriteLine(input + ": matched");
else
Console.WriteLine(input + ": match failed");
}
}
}
// The example displays the following output:
// 111 111-1111: matched
// 222-2222: matched
// 222 333-444: match failed
// (212) 111-1111: matched
// 111-AB1-1111: match failed
// 212-111-1111: matched
// 01 999-9999: match failed
맨 위로 이동
숫자가 아닌 문자: \D
\D는 숫자가 아닌 모든 문자를 찾습니다. \p{Nd} 정규식 패턴과 동일합니다.
ECMAScript와 호환되는 동작을 지정한 경우 \D는 [^0-9]와 같습니다. ECMAScript 정규식에 대한 자세한 내용은 정규식 옵션의 "ECMAScript 일치 동작" 섹션을 참조하십시오.
다음 예제에서는 \D 언어 요소를 보여 줍니다. 부품 번호 같은 문자열이 10진수 문자 및 10진수가 아닌 문자의 적절한 조합으로 구성되어 있는지 여부를 테스트합니다. ^\D\d{1,5}\D*$ 정규식 패턴은 다음 표에서와 같이 정의됩니다.
요소 |
설명 |
---|---|
^ |
입력 문자열의 시작 부분에서 일치 항목 찾기를 시작합니다. |
\D |
숫자가 아닌 문자를 찾습니다. |
\d{1,5} |
1~5의 10진수를 찾습니다. |
\D* |
0개 또는 한 개의 10진수가 아닌 문자를 찾습니다. |
$ |
입력 문자열의 끝 부분을 찾습니다. |
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "^\D\d{1,5}\D*$"
Dim inputs() As String = { "A1039C", "AA0001", "C18A", "Y938518" }
For Each input As String In inputs
If Regex.IsMatch(input, pattern) Then
Console.WriteLine(input + ": matched")
Else
Console.WriteLine(input + ": match failed")
End If
Next
End Sub
End Module
' The example displays the following output:
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"^\D\d{1,5}\D*$";
string[] inputs = { "A1039C", "AA0001", "C18A", "Y938518" };
foreach (string input in inputs)
{
if (Regex.IsMatch(input, pattern))
Console.WriteLine(input + ": matched");
else
Console.WriteLine(input + ": match failed");
}
}
}
// The example displays the following output:
// A1039C: matched
// AA0001: match failed
// C18A: matched
// Y938518: match failed
맨 위로 이동
지원되는 유니코드 일반 범주
유니코드는 다음 표에 나와 있는 일반 범주를 정의합니다. 자세한 내용은 Unicode Character Database의 하위 항목인 "UCD File Format" 및 "General Category Values"를 참조하십시오.
범주 |
설명 |
---|---|
Lu |
문자, 대문자 |
Ll |
문자, 소문자 |
Lt |
문자, 제목 스타일 |
Lm |
문자, 한정자 |
Lo |
문자, 기타 |
L |
다른 문자 여기에는 Lu, Ll, Lt, Lm 및 Lo 문자가 포함됩니다. |
Mn |
표시, 공백 없음 |
Mc |
표시, 공백 조합 |
Me |
표시, 묶기 |
M |
모든 분음 기호 여기에는 Mn, Mc 및 Me 범주가 포함됩니다. |
Nd |
숫자, 10진수 |
Nl |
숫자, 문자 |
No |
숫자, 기타 |
N |
모든 숫자 여기에는 Nd, Nl 및 No 범주가 포함됩니다. |
Pc |
문장 부호, 연결선 |
Pd |
문장 부호, 대시 |
Ps |
문장 부호, 열기 |
Pe |
문장 부호, 닫기 |
Pi |
문장 부호, 처음 따옴표(사용 방식에 따라 Ps 또는 Pe와 같이 동작) |
Pf |
문장 부호, 마지막 따옴표(사용 방식에 따라 Ps 또는 Pe와 같이 동작) |
Po |
문장 부호, 기타 |
P |
다른 구두점 문자 여기에는 Pc, Pd, Ps, Pe, Pi, Pf 및 Po 범주가 포함됩니다. |
Sm |
기호, 수학 |
Sc |
기호, 통화 |
Sk |
기호, 한정자 |
So |
기호, 기타 |
S |
모든 기호 여기에는 Sm, Sc, Sk 및 So 범주가 포함됩니다. |
Zs |
구분 기호, 공백 |
Zl |
구분 기호, 줄 |
Zp |
구분 기호, 단락 |
Z |
모든 구분 문자 여기에는 Zs, Zl 및 Zp 범주가 포함됩니다. |
Cc |
기타, 제어 |
Cf |
기타, 서식 |
Cs |
기타, 서로게이트 |
Co |
기타, 전용 항목 |
Cn |
기타, 지정되지 않음(문자에 이 속성 없음) |
C |
모든 컨트롤 문자. 여기에는 Cc, Cf, Cs, Co 및 Cn 범주가 포함됩니다. |
해당 문자를 GetUnicodeCategory 메서드로 전달하여 특정 문자의 유니코드 범주를 확인할 수 있습니다. 다음 예제에서는 GetUnicodeCategory 메서드를 사용하여 선택한 라틴 문자를 포함하는 배열에서 각 요소의 범주를 결정합니다.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim chars() As Char = { "a"c, "X"c, "8"c, ","c, " "c, ChrW(9), "!"c }
For Each ch As Char In chars
Console.WriteLine("'{0}': {1}", Regex.Escape(ch.ToString()), _
Char.GetUnicodeCategory(ch))
Next
End Sub
End Module
' The example displays the following output:
' 'a': LowercaseLetter
' 'X': UppercaseLetter
' '8': DecimalDigitNumber
' ',': OtherPunctuation
' '\ ': SpaceSeparator
' '\t': Control
' '!': OtherPunctuation
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
char[] chars = { 'a', 'X', '8', ',', ' ', '\u0009', '!' };
foreach (char ch in chars)
Console.WriteLine("'{0}': {1}", Regex.Escape(ch.ToString()),
Char.GetUnicodeCategory(ch));
}
}
// The example displays the following output:
// 'a': LowercaseLetter
// 'X': UppercaseLetter
// '8': DecimalDigitNumber
// ',': OtherPunctuation
// '\ ': SpaceSeparator
// '\t': Control
// '!': OtherPunctuation
맨 위로 이동
지원되는 명명된 블록
.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 또는 IsPrivateUseArea |
F900 - FAFF |
IsCJKCompatibilityIdeographs |
FB00 - FB4F |
IsAlphabeticPresentationForms |
FB50 - FDFF |
IsArabicPresentationForms-A |
FE00 - FE0F |
IsVariationSelectors |
FE20 - FE2F |
IsCombiningHalfMarks |
FE30 - FE4F |
IsCJKCompatibilityForms |
FE50 - FE6F |
IsSmallFormVariants |
FE70 - FEFF |
IsArabicPresentationForms-B |
FF00 - FFEF |
IsHalfwidthandFullwidthForms |
FFF0 - FFFF |
IsSpecials |
맨 위로 이동
문자 클래스 빼기
문자 클래스는 문자 집합을 정의합니다. 문자 클래스 빼기는 한 문자 클래스에서 다른 문자 클래스의 문자를 제외한 결과로 문자 집합을 생성합니다.
문자 클래스 빼기 식의 형식은 다음과 같습니다.
[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 일반 범주에서 IsBasicLatin 문자 범위의 모든 문자를 빼는 [\p{IsBasicLatin}-[\x00-\x7F]] 식을 사용하면 빈 집합이 생성됩니다. 마찬가지로 [a-z-[0-9]] 식을 사용하면 원래 기본 그룹이 생성됩니다. "a"부터 "z"까지의 문자 범위를 나타내는 기본 그룹에는 제외할 그룹의 문자, 즉 "0"부터 "9"까지의 10진수 문자 범위가 없기 때문입니다.
다음 예제에서는 입력 문자열에서 0과 홀수를 찾는 정규식 ^[0-9-[2468]]+$를 정의합니다. 정규식은 다음 표와 같이 해석됩니다.
요소 |
설명 |
---|---|
^ |
입력 문자열의 시작 부분에서 일치 항목 찾기를 시작합니다. |
[0-9-[2468]]+ |
모든 문자 0에서 9까지 2, 4, 6 및 8을 제외한 하나 이상의 항목을 일치하십시오. 즉, 한 번 이상 나오는 0 또는 홀수와 일치합니다. |
$ |
입력 문자열의 끝에서 일치 확인을 끝냅니다. |
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim inputs() As String = { "123", "13579753", "3557798", "335599901" }
Dim pattern As String = "^[0-9-[2468]]+$"
For Each input As String In inputs
Dim match As Match = Regex.Match(input, pattern)
If match.Success Then Console.WriteLine(match.Value)
Next
End Sub
End Module
' The example displays the following output:
' 13579753
' 335599901
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string[] inputs = { "123", "13579753", "3557798", "335599901" };
string pattern = @"^[0-9-[2468]]+$";
foreach (string input in inputs)
{
Match match = Regex.Match(input, pattern);
if (match.Success)
Console.WriteLine(match.Value);
}
}
}
// The example displays the following output:
// 13579753
// 335599901
맨 위로 이동