Qt具有特殊的本地化调用功能。如qsTr()、tr()、QT_TR_NOOP()、qsTranslate()等。
我需要解析上述函数调用params的内容。
例如,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*\\))上面的regex将完全匹配“源字符串”,这是正确的。
但是我需要一个DOTALL正则表达式,而不仅仅是单行。
一个可能的问题是,我们可以找到下一个不正确的呼叫,我们应该忽略它:
qsTr("source", count)由于贪婪的量词,上述正则表达式将失败。它将查找下一个"\\s*)"下整个文本。有什么办法解决这个问题吗?
发布于 2013-09-09 11:01:28
实际上,可以在引号之间找到内容,然后再寻找)。
模式看起来就像
Pattern.compile("\\qsTr?\\s*\\(\\s*(((\".*?(?<!\\\\)\")|('.*?(?<!\\\\)')).*?)(?=\\))", Pattern.DOTALL);它保证qsTr()包装的内容是否从“它将被完全提取”开始。例如,如果要解析下一个字符串:
qsTr("source", count)你会得到下一个结果:
"source", count然后,您可以检查提取的字符串的有效性(例如,如果qsTr函数可以在静态字符串param之后包含另一个params )。
https://stackoverflow.com/questions/18145092
复制相似问题