2017-01-27 12 views
0

현재 Poedit으로 웹 사이트 (Smarty)를 번역하는 중입니다. .tpl 파일에서 모든 텍스트를 얻으려면 정규식을 사용하여 {t}와 {/ t} 사이의 데이터를 가져옵니다. 그래서 예 :Regex : 여러 대괄호 사이의 값 읽기

{t}Password incorrect, please try again{/t} 

정규식은 Password incorrect, please try again를 읽고와 .po 파일에 배치됩니다. 이것은 모두 정상적으로 작동합니다. 조금 더 발전하면 잘못됩니다.

때때로 {t} 태그 사이의 텍스트에 매개 변수가 사용됩니다. 이 모양은 다음과 같습니다.

{t 1=$email|escape 2=$mailbox}No $1 given, please check your $2{/t} 

위의 코드는 매우 효과적입니다. 결과가 2=$mailbox}visit %1 or go to your %2 될 것입니다 그래서 첫 번째 닫는 괄호를 볼 때

{t 1={site info='name'} 2=$mailbox}visit %1 or go to your %2{/t} 

내 정규식 닫습니다 :이 같은 매개 변수 내에서 괄호를 사용하는 경우

진짜 문제

시작.

내 정규식은 다음과 같습니다

\{t.*?\}?[}]([^\{]+)\{\/t\}|\{t\}([^\{]+)\{\/t\} 

정규식은 자바 프로그램 내에서 사용된다.

누구든지이 문제를 해결할 방법이 있습니까?

+1

수정 중첩 된 괄호를 처리하는 파서를 작성하는 것입니다. 정규식은이 유형의 문제를 잘 처리하지 못합니다. –

답변

0

내가보기에 가장 쉬운 해결책은 .tpl 파일을 표준화하는 것입니다. 다만이 같은 모든 태그 뭔가 일치하는 정규식 사용

{[^}]*[^{]*} 

를 내가 해결하기 위해 동일한 문제가 있었다 그리고 그것은 정상화와 함께 꽤 좋은 일했다.

정규화-방법은 다음과 같을 것이다 :

final String regex = "\\{[^\\}]*[^\\{]*\\}"; 

private String normalizeContent(String content) { 
    return content.replaceAll(regex, ""); 
}