정규식의 그룹은 매우 중요한 개념이며 고급 정규식 애플리케이션으로 연결되는 다리 역할을 합니다.
그룹의 개념
정규식 일치 결과는 여러 부분으로 나눌 수 있습니다. 그룹을 유연하게 사용할 수 있게 되면 Regex가 정말 편리하고 강력하다는 것을 알게 될 것입니다.
먼저 예를 들어보겠습니다:
public static void Main()
{
문자열 s = "2005-2-21";
Regex reg = new Regex(@"(?<y>d{4})-(?<m>d{1,2})-(?<d>d{1,2})",RegexOptions .컴파일됨);
일치 일치 = reg.Match(s);
int year = int.Parse(match.Groups["y"].Value);
int 월 = int.Parse(match.Groups["m"].Value);
int day = int .Parse(match.Groups["d"].Value);
DateTime 시간 = new DateTime(년,월,일);
Console.WriteLine(시간);
Console.ReadLine();
}
위의 예제는 문자열을 그룹별로 분석하여 DateTime 인스턴스로 변환한 것입니다. 물론 이 함수는 DateTime.Parse 메서드를 사용하여 쉽게 구현할 수 있습니다.
이 예에서는 (?<name>)을 사용하여 일치 결과를 각각 연도, 월, 일을 나타내는 "y", "m", "d" 세 그룹으로 나눕니다.
이제 그룹에 대한 개념이 생겼으니 그룹화하는 방법을 살펴보겠습니다. 위의 방법 외에도 대괄호 쌍을 사용하여 그룹을 정의할 수 있습니다. 예를 들어 위의 예는 다음과 같이 변경할 수 있습니다.
공개 정적 무효 Main()
{
문자열 s = "2005-2-21";
정규식 reg = new Regex(@"(d{4})-(d{1,2})-(d{1,2})",RegexOptions.Compiled);
일치 일치 = reg.Match(s);
int year = int.Parse(match.Groups[1].Value);
int 월 = int.Parse(match.Groups[2].Value);
int day = int .Parse(match.Groups[3].Value);
DateTime 시간 = new DateTime(년,월,일);
Console.WriteLine(시간);
Console.ReadLine();
}
위의 예에서 볼 수 있듯이 첫 번째 대괄호 쌍에 포함된 그룹은 자동으로 1번이 지정되고, 다음 대괄호는 2, 3번이 지정됩니다...
public static void Main()
{
문자열 s = "2005-2-21";
Regex reg = new Regex(@"(?<2>d{4})-(?<1>d{1,2})-(?<3>d{1,2})",RegexOptions .컴파일됨);
일치 일치 = reg.Match(s);
int year = int.Parse(match.Groups[2].Value);
int 월 = int.Parse(match.Groups[1].Value);
int day = int .Parse(match.Groups[3].Value);
DateTime 시간 = new DateTime(년,월,일);
Console.WriteLine(시간);
Console.ReadLine();
}
위의 세 가지 예를 통해
1과 2의 위치를 왼쪽에서 오른쪽으로 정의하지 않았습니다).
우리는 Regex에 대한 그룹을 정의하는 세 가지 방법과 그룹 일치 결과를 참조하는 해당 방법을 알고 있습니다.
그러면 그룹 정의에 관해 두 가지 사항을 더 주의하시기 바랍니다.
1. 그룹을 정의하는 데 대괄호를 사용하므로 "(" 및 ")"를 일치시키려면 "(" 및 ")"를 사용하십시오(대략 모두) 특수 문자 정의에 대해서는 관련 Regex 표현식 도움말 문서를 확인하세요.
2. Regex를 정의할 때 ExplicitCapture 옵션을 사용하는 경우 두 번째 예는 성공하지 못합니다. 왜냐하면 ExplicitCapture 옵션을 정의하지 않는 경우, 때로는 결과를 캡처하고 저장하기 위해 숫자 또는 이름이 포함된 명시적으로 정의된 그룹이 필요하기 때문입니다. (A|B)와 유사한 표현식을 정의하고 이 (A|B)의 결과를 캡처하지 않으려는 경우 다음과 같이 정의되는 "비캡처 그룹" 구문을 사용할 수 있습니다. ?:) 방법, (A|B)에 대해 이렇게 정의하면 그룹 컬렉션 - (?:A|B)에 캡처하여 저장하지 않는 목적을 달성할 수 있습니다.