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

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

Barbara Streisand
풀어 주다: 2025-01-16 15:00:20
원래의
136명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿