를 호출하는 문제입니다 :정규 표현식은 다음
"<p>The price for vehicles {capitalize(pluralize(vehicle))} is {format_number(value, language)}</p><span>{employee_name}</span><span>\{do not parse me}</span>"
같은 문자열 주어진 나는 중괄호의 이스케이프 쌍 사이의 모든 값을 일치 PHP (1) 정규식 패턴이 필요 및 (2) 함수 호출과 중첩 함수 일치 다른 정규식 패턴 (제 1 패턴이 일치되면) 부른다. 물론, 만약 내가 두 작업에 대해서만 끝내 줄 수있는 하나의 정규식을 사용할 수 있습니다.
그런데, 나는 Smarty, Twig 또는 다른 라이브러리를 사용할 수 없습니다. 이것이 내가 직접 구문 분석 메커니즘을 구축해야하는 유일한 이유입니다.
감사합니다.
해결책 (1) 첫 번째 문제에 대한 부분적인 해결책은 here입니다. 기본적으로 정규식
(?={((?:[^{}]++|{(?1)})++)})을 사용하고 결과 배열의 인덱스 1에서 일치하는 항목을 찾습니다.
나는 여전히 중괄호를 이스케이프하는 방법을 찾아야하기 때문에 부분적입니다.
(2) Mario가 제안한 재귀 적 정규식의 사용을 고려하고 있습니다. 여기에 결과를 게시합니다.
감사합니다. 은 "응답되지 않은"필터에서이 문제를 제거하기 위해 의견에서 답을 복사
는
제 정규식은 간단하지만, 두번째는 PHP를 사용하여 수행 될 수 없다. 대신 파서를 사용해야합니다. –
정규식은 중첩/재귀 구조를 구문 분석하는 데 적합하지 않습니다. –
이스케이프 처리 된 곱슬과''(? R)'재귀 적 정규 표현식] (http://php.net/manual/en/regexp.)을 피하기 위해 부정적인 lookbehind'(? mario