![고급 정규식: (?R) 재귀 정규식을 사용할 수 있는 상황을 찾을 수 없습니다.](https://linux55.com/image/176117/%EA%B3%A0%EA%B8%89%20%EC%A0%95%EA%B7%9C%EC%8B%9D%3A%20(%3FR)%20%EC%9E%AC%EA%B7%80%20%EC%A0%95%EA%B7%9C%EC%8B%9D%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%8A%94%20%EC%83%81%ED%99%A9%EC%9D%84%20%EC%B0%BE%EC%9D%84%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
(?R)
재귀적인 Perl/PCRE 정규식이 도움이 되는 상황을 설명할 수 있는 사람이 있습니까?
나는 읽었다
- https://regular-expressions.mobi/recursebacktrack.html?wlr=1
- https://perldoc.perl.org/perlre.html#(%3fPARNO)-(%3f-PARNO)-(%3f%2bPARNO)-(%3fR)-(%3f0)
하지만 아직 활용 사례를 찾을 수 없습니다.
답변1
일반적인 예는 괄호 안에 숫자, 연산자 및 하위 표현식이 포함된 산술 표현식을 일치시키는 것입니다.
([0-9]+|\((?R)\))([-+*\/]([0-9]+|\((?R)\)))*
^^^^^^ ^^^^^^^^ ^^^^^^^ ^^^^^^ ^^^^^^^^
number (subexp) oper number (subexp)
\______ _______/ \______ _______/
\/ \/
One of those One of those
\__________ ____________/
\/
Zero or more of those
즉, 일치
- 괄호 안의 숫자 또는 하위 표현식, 그 뒤에
- 0개 이상의 연산자와 숫자 또는 괄호 안의 하위 표현식.
답변2
중첩 괄호와 같은 중첩 구조를 일치시키는 도구입니다.
수학적으로 정의된 정규 표현식은 이와 일치할 수 없습니다.
\( ( [^()]*+ | (?R) )* \)
온라인으로 보기(공백은 무시해야 합니다).
읽어주세요: