正则表达式:读取多个括号之间的值
Regex: Read value between multiple brackets
我目前正在使用 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 given, please check your {/t}
这也很好用。
当我像这样在参数中使用方括号时,真正的问题就开始了:
{t 1={site info='name'} 2=$mailbox}visit %1 or go to your %2{/t}
我的正则表达式将在看到第一个右括号时关闭,因此结果将是 2=$mailbox}visit %1 or go to your %2
.
我的正则表达式如下所示:
\{t.*?\}?[}]([^\{]+)\{\/t\}|\{t\}([^\{]+)\{\/t\}
正则表达式在 java 程序中使用。
有人有办法解决这个问题吗?
我看到的最简单的解决方案是规范化 .tpl 文件。只需使用匹配 all 标签的正则表达式,如下所示:
{[^}]*[^{]*}
我有同样的问题要解决,它在规范化方面效果很好。
normalizing-method 看起来像这样:
final String regex = "\{[^\}]*[^\{]*\}";
private String normalizeContent(String content) {
return content.replaceAll(regex, "");
}
我目前正在使用 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 given, please check your {/t}
这也很好用。
当我像这样在参数中使用方括号时,真正的问题就开始了:
{t 1={site info='name'} 2=$mailbox}visit %1 or go to your %2{/t}
我的正则表达式将在看到第一个右括号时关闭,因此结果将是 2=$mailbox}visit %1 or go to your %2
.
我的正则表达式如下所示:
\{t.*?\}?[}]([^\{]+)\{\/t\}|\{t\}([^\{]+)\{\/t\}
正则表达式在 java 程序中使用。
有人有办法解决这个问题吗?
我看到的最简单的解决方案是规范化 .tpl 文件。只需使用匹配 all 标签的正则表达式,如下所示:
{[^}]*[^{]*}
我有同样的问题要解决,它在规范化方面效果很好。
normalizing-method 看起来像这样:
final String regex = "\{[^\}]*[^\{]*\}";
private String normalizeContent(String content) {
return content.replaceAll(regex, "");
}