다음을 통해 공유


Visual Basic의 정규식 문제 해결

업데이트: 2007년 11월

이 항목에서는 정규식으로 작업하는 경우 발생할 수 있는 일부 일반적인 문제에 대해 설명하고 이러한 문제를 해결하기 위한 팁과 캡처된 문자열에 액세스할 수 있는 프로시저를 제공합니다.

의도한 패턴과 일치하지 않는 경우

다음은 원하는 결과를 얻지 못한 경우 정규식으로 수행할 수 있는 몇 가지 일반 작업 및 문제 해결 팁입니다.

  • 문자열 유효성 검사. 문자열 유효성 검사 정규식은 ^ 문자로 시작되어야 합니다. 이렇게 해야 정규식 엔진이 문자열의 시작 부분에서 지정한 패턴 일치를 시작할 수 있습니다. 자세한 내용은 Visual Basic에서 유효성 검사 함수 만들기너비가 0인 원자적 어설션을 참조하십시오.

  • **수량자와 일치.**정규식 수량자(*, +, ?, {})는 greedy이며 가능한 한 긴 문자열과 일치한다는 의미입니다. 그러나 일부 패턴에서는 가능한 한 짧은 문자열과 일치하는 lazy를 사용하는 경우도 있습니다. lazy 정규식 수량자는 *?, +?, ?? 및 {}?입니다. 자세한 내용은 수량자를 참조하십시오.

  • 중첩 수량자와 일치. 중첩 수량자를 사용하는 경우 모든 수량자가 greedy 또는 lazy인지 확인합니다. 그렇지 않으면 일치 결과를 예측하기 힘듭니다.

캡처된 문자열에 액세스하려는 경우

정규식에서 원하는 문자열을 찾으면 해당 문자열을 캡처한 다음 캡처한 문자열에 액세스할 수 있습니다. 사용자는 그룹화 구문을 사용하여 정규식의 부분식 그룹과 일치하는 문자열을 캡처할 수 있습니다. 자세한 내용은 그룹화 구문을 참조하십시오.

중첩 그룹으로 캡처된 문자열에 액세스하려면 여러 단계를 거쳐야 합니다.

캡처된 텍스트에 액세스하려면

  1. 정규식에 대한 Regex 개체를 만듭니다.

  2. Match 메서드를 호출하여 Match 개체를 가져옵니다.

    Match 개체에는 정규식이 문자열을 찾는 방법에 대한 정보가 포함되어 있습니다.

  3. Match 개체의 Groups 컬렉션에 저장된 Group 개체를 반복합니다.

    Group 개체에는 단일 캡처 그룹의 결과에 대한 정보가 포함되어 있습니다.

  4. Group 개체의 Captures 컬렉션에 저장된 Capture 개체를 반복합니다.

    Capture 개체에는 일치하는 부분 문자열 및 위치를 비롯하여 캡처된 단일 부분식에 대한 정보가 포함되어 있습니다.

예를 들어, 다음 코드에서는 3개의 캡처 그룹을 포함하는 정규식으로 캡처된 문자열에 액세스하는 방법을 보여 줍니다.

    ''' <summary>
    ''' Parses an e-mail address into its parts.
    ''' </summary>
    ''' <param name="emailString">E-mail address to parse.</param>
    ''' <remarks> For example, this method displays the following 
    ''' text when called with "someone@mail.contoso.com":
    ''' User name: someone
    ''' Address part: mail
    ''' Address part: contoso
    ''' Address part: com
    ''' </remarks>
    Sub ParseEmailAddress(ByVal emailString As String)
        Dim emailRegEx As New Regex("(\S+)@([^\.\s]+)(?:\.([^\.\s]+))+")
        Dim m As Match = emailRegEx.Match(emailString)
        If m.Success Then
            Dim output As String = ""
            output &= "User name: " & m.Groups(1).Value & vbCrLf
            For i As Integer = 2 To m.Groups.Count - 1
                Dim g As Group = m.Groups(i)
                For Each c As Capture In g.Captures
                    output &= "Address part: " & c.Value & vbCrLf
                Next
            Next
            MsgBox(output)
        Else
            MsgBox("The e-mail address cannot be parsed.")
        End If
    End Sub

참고 항목

작업

Visual Basic의 문자열 문제 해결

개념

Visual Basic에서 유효성 검사 함수 만들기