정규 표현식을 사용하여 균형 있는 괄호 확인
정규 표현식은 강력하지만 정규 표현식만 사용하여 괄호의 균형을 완벽하게 맞추는 것은 본질적으로 어렵습니다. 그러나 특정 컨텍스트 내에서 균형 잡힌 괄호를 효과적으로 검증하는 정규식을 만들 수 있습니다. 다음 접근 방식은 방법을 보여줍니다.
괄호 유효성 검사 정규식:
<code>func([a-zA-Z_][a-zA-Z0-9_]*) # Function name \( # Opening parenthesis (?: [^()] # Match any character except parentheses | (?<open> \( ) # Match opening parenthesis, add to 'open' stack | (?<-open> \) ) # Match closing parenthesis, remove from 'open' stack )+ (?(open)(?!)) # Fails if 'open' stack is not empty \) # Closing parenthesis</code>
작동 방식:
이 정규식은 균형 그룹을 활용합니다(많은 정규식 엔진에서 사용 가능하지만 전부는 아님).
(?<open> ( )
및 (?<-open> ) )
은 이름이 지정된 캡처 그룹을 사용합니다. (?<open> ...)
은 "open"이라는 스택에 일치하는 여는 괄호를 추가합니다. (?<-open> ...)
"열기" 스택에서 일치하는 닫는 괄호를 제거합니다.(?(open)(?!))
은 조건식입니다. "열린" 스택이 비어 있는지 확인합니다. 비어 있지 않으면(균형이 맞지 않는 괄호) 전체 일치가 실패합니다.예:
입력 문자열이 주어지면: "test -> funcPow((3),2) * (9 1)"
정규식은 "funcPow((3),2)"
을 균형 잡힌 괄호 표현으로 올바르게 식별합니다. 바깥쪽 괄호가 불균형하기 때문에 일치하지 않습니다"funcPow((3),2) * (9 1)
제한사항:
func([a-zA-Z_][a-zA-Z0-9_]*)
이 정규식은 함수 호출과 직접 관련된 괄호에만 작동합니다(
위 내용은 정규 표현식이 괄호의 균형을 효과적으로 맞출 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!