2017-01-27 110 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, ""); 
} 
相關問題