>백엔드 개발 >C++ >정규식은 복잡한 문자열에서 균형 잡힌 괄호 일치를 어떻게 해결할 수 있습니까?

정규식은 복잡한 문자열에서 균형 잡힌 괄호 일치를 어떻게 해결할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-16 15:00:20183검색

How Can Regular Expressions Solve Balanced Parenthesis Matching in Complex Strings?

정규 표현식을 사용한 균형 잡힌 괄호 매칭 마스터하기

복잡한 문자열의 정확한 구문 분석은 균형 잡힌 괄호를 올바르게 식별하는 데 달려 있습니다. 고급 기능을 갖춘 정규식(RegEx)은 이러한 과제에 대한 강력한 솔루션을 제공합니다.

문자열 "test -> funcPow((3),2) (9 1)"을 생각해 보세요. 목표는 "funcPow"에서 시작하여 마지막 괄호를 제외하고 두 번째 닫는 괄호까지 확장되는 하위 문자열을 추출하는 것입니다. "func(a-zA-Z_)(.*)"와 같은 간단한 RegEx가 실패하고 원하는 "funcPow((3),2)" 대신 전체 표현식이 반환됩니다.

이 문제를 해결하는 열쇠는 균형 잡힌 괄호 일치를 위해 RegEx 기능을 사용하는 것입니다. 해결책은 다음과 같습니다.

<code>func([a-zA-Z_][a-zA-Z0-9_]*) # Function name
\(                      # Opening parenthesis
    (?:                 
    [^()]               # Match any character except parentheses
    |
    (?<open> \( )       # Match opening parenthesis, capture into 'open' group
    |
    (?<-open> \) )      # Match closing parenthesis, delete 'open' group capture
    )+
    (?(open)(?!))       # Fails if 'open' group is not empty (unbalanced)
\)                      # Closing parenthesis</code>

이 RegEx는 명명된 캡처 그룹과 조건식을 교묘하게 사용합니다. (?<open> ( )는 여는 괄호를 캡처하는 반면, (?<-open> ) )는 닫는 괄호를 일치시키는 동시에 이전에 캡처된 여는 괄호를 제거합니다. 조건부 (?(open)(?!))는 모든 여는 괄호가 닫는 괄호와 일치하는지 확인합니다. 그렇지 않으면 일치가 실패하며 괄호의 균형이 맞지 않음을 나타냅니다.

이 고급 RegEx 기술은 복잡한 입력 문자열에서 균형 괄호가 포함된 하위 문자열을 추출하는 강력하고 정확한 방법을 제공하여 효율적이고 안정적인 구문 분석을 가능하게 합니다.

위 내용은 정규식은 복잡한 문자열에서 균형 잡힌 괄호 일치를 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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