2017-01-27 79 views
0

我目前正致力于将Poedit翻译为一个网站(Smarty)。要从.tpl文件中获取所有文本,我使用正则表达式来获取{t}和{/ t}之间的数据。这样一个例子:正则表达式:读取多个括号之间的值

{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\} 

正则表达式是一个Java程序中使用。

有没有人有办法解决这个问题?

+1

修复的方法是写一个解析器来处理嵌套括号。正则表达式不能很好地处理这类问题。 –

回答

0

我看到的最简单的解决方案是规范化.tpl文件。只要使用它匹配所有标签是这样一个正则表达式:

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

我有同样的问题,解决和它的工作相当不错与正火。

正火,方法是这样的:

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

private String normalizeContent(String content) { 
    return content.replaceAll(regex, ""); 
} 
相关问题