Qt 具有用于本地化调用的特殊功能。qsTr()
, tr()
, QT_TR_NOOP()
,qsTranslate()
等函数
我需要解析上述函数调用参数的内容。
例如qsTr()
:
qsTr(string source, string disambiguation, int n)
该函数只有 3 个可能的调用
qsTr("source")
qsTr("source", "disambiguation")
qsTr("source", "disambiguation", count) // count - some int value for source
// if it contains plurals - %n
假设我们在源 Qt 或 QML 中找到了这一行:
qsTr("source string")
对于这种情况,我编写了一个 Java 正则表达式:
(?<=qsTr\\()(\\s*(\\".*?(?<\\\\)\\")?)(?=\\s*\\))
上面的正则表达式将完全匹配“源字符串”,这是正确的。
但我需要一个 DOTALL 正则表达式,而不仅仅是单行。
一个可能的问题是我们可以找到不正确的下一个调用,我们应该忽略它:
qsTr("source", count)
由于贪婪的量词,上述正则表达式将失败。它将"\\s*)"
在整个文本中查找下一个。任何想法如何解决这个问题?