재귀나 균형 그룹 없이 중첩 괄호 일치
과제:
다음과 같은 정규 표현식 가능 Java의 java.util.regex에 있는 항목은 재귀 또는 균형 그룹에 의존하지 않고 임의로 중첩된 대괄호와 일치합니까?
해결책:
예, 전방 참조를 사용하면 가능합니다.
(?=\()(?:(?=.*?\((?!.*?)(.*\)(?!.*).*))(?=.*?\)(?!.*?)(.*)).)+?.*?(?=)[^(]*(?=$)
작동 방식:
이 표현식은 중첩된 괄호 그룹을 식별하기 위해 함께 작동하는 여러 예측 및 전방 참조로 구성됩니다.
예:
다음 문자열은 세 개의 중첩 그룹과 일치합니다.
(F(i(r(s)t))) ((S)(e)((c)(o))(n)d) (((((((Third)))))))
내부 그룹 일치:
내부 그룹과 일치하려면 캡처 그룹을 추가할 수 있습니다. 표현식 끝까지:
(?=\()(?=((?:(?=.*?\((?!.*?)(.*\)(?!.*).*))(?=.*?\)(?!.*?)(.*)).)+?.*?(?=)[^(]*(?=$)))
위 내용은 재귀 또는 균형 그룹 없이 Regex가 중첩된 괄호를 일치시킬 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!