정규식 팁: 균형 괄호의 완벽한 일치
프로그래밍 세계에서는 균형 잡힌 괄호가 코드 무결성을 보장하는 데 매우 중요합니다. 정규식(RegEx)은 대괄호 쌍을 식별하고 검증하는 강력한 메커니즘을 제공합니다. 그러나 대괄호를 정확하게 일치시키는 정규식을 만드는 것은 복잡한 작업이 될 수 있습니다.
다음 정규 표현식을 고려해 보세요.
<code>func([a-zA-Z_][a-zA-Z0-9_]*)\(.*\)</code>
이 표현식은 "funcPow((3),2) * (9 1)" 문자열과 일치하도록 설계되었습니다. 이상적으로는 "funcPow((3),2)"만 선택해야 하지만 현재는 마지막 닫는 괄호까지 모든 것을 캡처하므로 일치 항목이 예상과 다릅니다.
균형 매칭 솔루션:
이 문제를 해결하려면 정규식의 강력한 기능(삭제 캡처)을 활용하는 고급 구현이 필요합니다. 다음 수정된 표현식은 균형 잡힌 대괄호 일치를 달성하는 방법을 보여줍니다.
<code>var r = new Regex(@" func([a-zA-Z_][a-zA-Z0-9_]*) # 函数名 \( # 开括号 (?: [^()] # 匹配所有非括号字符 | (?<open> \( ) # 匹配'(', 并捕获到名为'open'的组中 | (?<-open> \) ) # 匹配')', 并删除'open'组中的相应捕获 )+ (?(open)(?!)) # 如果'open'堆栈不为空,则匹配失败 \) # 闭括号 ", RegexOptions.IgnorePatternWhitespace);</code>
균형 매칭 하위 그룹 설명:
균등 괄호의 핵심은 다음 하위 그룹에 있습니다.
캡처 절 없음: (?(open)(?!))
이 조건식은 "열기" 캡처가 비어 있지 않은 경우 안전 메커니즘으로 사용됩니다. "열린" 캡처가 여전히 존재하는 경우, 즉 일치하지 않는 여는 괄호가 있음을 의미하며 표현식 일치가 실패합니다.
이러한 기술을 결합하면 대괄호와 정확하게 일치하고 원하는 일치 항목을 반환하는 정규식을 만들 수 있습니다.
<code>"funcPow((3),2)"</code>
정규식의 고급 기능을 익히면 대괄호와 같은 복잡한 문자열 처리 문제를 우아하고 효율적으로 해결할 수 있습니다.
위 내용은 정규식을 사용하여 문자열에서 균형이 맞는 괄호만 일치시키려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!