>  기사  >  백엔드 개발  >  C#의 정규식 그룹은 어떻게 일치하는 하위 문자열을 캡처하고 액세스합니까?

C#의 정규식 그룹은 어떻게 일치하는 하위 문자열을 캡처하고 액세스합니까?

DDD
DDD원래의
2024-10-29 18:48:57981검색

How do Regular Expression Groups in C# Capture and Access Matched Substrings?

C#의 정규 표현식 그룹: 일치 결과 이해

다음 C# 코드 블록을 고려하세요.

<code class="csharp">var pattern = @"\[(.*?)\]";
var matches = Regex.Matches(user, pattern);
if (matches.Count > 0 && matches[0].Groups.Count > 1)
    ...</code>

이것은 코드는 정규식을 사용하여 사용자 입력 문자열에서 대괄호로 묶인 텍스트를 추출합니다. 입력 "Josh Smith [jsmith]"에 대해 코드는 다음 결과를 올바르게 반환합니다.

matches.Count == 1
matches[0].Value == "[jsmith]"

그러나 후속 줄에서는 질문이 제기됩니다.

matches[0].Groups.Count == 2
matches[0].Groups[0].Value == "[jsmith]"
matches[0].Groups[1].Value == "jsmith"

일치 그룹화

정규식에서 그룹은 일치 항목의 특정 부분을 캡처하는 데 사용됩니다. 기본적으로 전체 일치 항목은 그룹 0에 캡처됩니다. 추가 캡처 그룹은 괄호를 사용하여 정의할 수 있습니다.

제공된 코드에서 정규식은 (.*?)로 표시되는 단일 캡처 그룹을 정의합니다. 이 그룹은 대괄호 안의 텍스트를 캡처합니다(이 경우 jsmith). 따라서:

  • matches[0].Groups[0]에는 대괄호를 포함하여 전체 일치 항목이 포함됩니다. [jsmith]
  • matches[0].Groups[1]에는 다음이 포함됩니다. 괄호 안에 캡처된 텍스트: jsmith

중첩 그룹

더 복잡한 정규 표현식에서는 중첩 그룹을 가질 수 있습니다. 이러한 경우 각 그룹에는 자체 캡처 세트가 포함됩니다. 그러나 제공된 코드에는 그룹화 수준이 하나만 있으므로

  • matches[0].Groups[1].Captures는 항상 비어 있습니다.

추가 고려 사항

  • 그룹 0: 캡처 그룹이 정의되었는지 여부에 관계없이 그룹 0에는 항상 전체 일치 항목이 포함된다는 점에 유의하는 것이 중요합니다.
  • 그룹 수: 정규식 일치의 그룹 수는 패턴에 정의된 캡처 그룹 수에 따라 달라집니다. 제공된 예에는 캡처 그룹이 하나만 있으므로 총 2개의 그룹이 됩니다.

위 내용은 C#의 정규식 그룹은 어떻게 일치하는 하위 문자열을 캡처하고 액세스합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.