다음과 같은 텍스트 입력 dogcatcatcat
과 같은 패턴 이 있다고 상상해보십시오.dog(cat(catcat))
이 경우 그룹이 3 개이며 첫 번째 그룹 ( 주요 그룹 )이 일치합니다.
일치 == dogcatcatcat
및 Group0 ==dogcatcatcat
Group1 == catcatcat
Group2 == catcat
무슨 일이야?
Regex
클래스를 사용하여 C # (. NET)으로 작성된 작은 예제를 살펴 보겠습니다 .
int matchIndex = 0;
int groupIndex = 0;
int captureIndex = 0;
foreach (Match match in Regex.Matches(
"dogcatabcdefghidogcatkjlmnopqr", // input
@"(dog(cat(...)(...)(...)))") // pattern
)
{
Console.Out.WriteLine($"match{matchIndex++} = {match}");
foreach (Group @group in match.Groups)
{
Console.Out.WriteLine($"\tgroup{groupIndex++} = {@group}");
foreach (Capture capture in @group.Captures)
{
Console.Out.WriteLine($"\t\tcapture{captureIndex++} = {capture}");
}
captureIndex = 0;
}
groupIndex = 0;
Console.Out.WriteLine();
}
출력 :
match0 = dogcatabcdefghi
group0 = dogcatabcdefghi
capture0 = dogcatabcdefghi
group1 = dogcatabcdefghi
capture0 = dogcatabcdefghi
group2 = catabcdefghi
capture0 = catabcdefghi
group3 = abc
capture0 = abc
group4 = def
capture0 = def
group5 = ghi
capture0 = ghi
match1 = dogcatkjlmnopqr
group0 = dogcatkjlmnopqr
capture0 = dogcatkjlmnopqr
group1 = dogcatkjlmnopqr
capture0 = dogcatkjlmnopqr
group2 = catkjlmnopqr
capture0 = catkjlmnopqr
group3 = kjl
capture0 = kjl
group4 = mno
capture0 = mno
group5 = pqr
capture0 = pqr
첫 번째 일치 항목 ( match0
) 만 분석하겠습니다 .
당신이 볼 수 있듯이이 세 가지 있습니다 작은 그룹은 : group3
, group4
및group5
group3 = kjl
capture0 = kjl
group4 = mno
capture0 = mno
group5 = pqr
capture0 = pqr
이러한 그룹 (3-5)은 기본 패턴 의 ' 서브 패턴 ' (...)(...)(...)
으로 인해 생성되었습니다. (dog(cat(...)(...)(...)))
의 값은 group3
캡처 ( capture0
) 에 해당합니다 . ( group4
및 의 경우 와 같이 group5
). 같은 그룹 반복이 없기 때문 (...){3}
입니다.
자, 그룹 반복 이있는 또 다른 예를 생각해 봅시다 .
우리가에서 (코드 위의 그림에 대한) 일치하는 정규 표현식 패턴을 수정하는 경우 (dog(cat(...)(...)(...)))
에 (dog(cat(...){3}))
, 다음이 있음을 알 수 있습니다 그룹 반복 : (...){3}
.
이제 출력 이 변경되었습니다.
match0 = dogcatabcdefghi
group0 = dogcatabcdefghi
capture0 = dogcatabcdefghi
group1 = dogcatabcdefghi
capture0 = dogcatabcdefghi
group2 = catabcdefghi
capture0 = catabcdefghi
group3 = ghi
capture0 = abc
capture1 = def
capture2 = ghi
match1 = dogcatkjlmnopqr
group0 = dogcatkjlmnopqr
capture0 = dogcatkjlmnopqr
group1 = dogcatkjlmnopqr
capture0 = dogcatkjlmnopqr
group2 = catkjlmnopqr
capture0 = catkjlmnopqr
group3 = pqr
capture0 = kjl
capture1 = mno
capture2 = pqr
다시, 첫 번째 일치 ( match0
) 만 분석해 봅시다 .
이보다 더없는 작은 그룹 group4
및 group5
때문에 (...){3}
반복 ( {N} 항에있어서, N> = 2 )가 있었던 하나 개의 단일 그룹으로 병합 group3
.
이 경우 group3
값은 해당 값에 해당합니다 capture2
( 즉, 마지막 캡처 ).
당신은 모든 3 내부 캡처를 필요 따라서 경우에 ( capture0
, capture1
, capture2
) 당신은 그룹의 순환해야 Captures
모음입니다.
결론 : 패턴 그룹을 디자인하는 방식에주의하십시오. 당신은 행동이 같은 그룹의 사양의 원인을 선불로 생각해야한다 (...)(...)
, (...){2}
또는 (.{3}){2}
등
바라건대 Captures , Groups 및 Matches 의 차이점에 대한 정보를 얻을 수 있기를 바랍니다 .
a functionality that won't be used in the majority of cases
보트를 놓친 것 같아 단기적(?:.*?(collection info)){4,20}
으로 효율이 수백 퍼센트 이상 증가합니다.