用于解析Qt本地化函数参数的Java正则表达式
Qt具有用于本地化调用的特殊功能。 函数,如用于解析Qt本地化函数参数的Java正则表达式,java,regex,qt,greedy,localizable.strings,Java,Regex,Qt,Greedy,Localizable.strings,Qt具有用于本地化调用的特殊功能。 函数,如qsTr(),tr(),QT\u tr\u NOOP(),qstranlate(),等等 我需要解析上述函数调用params的内容 例如,qsTr(): 该函数只有3个可能的调用 qsTr("source") qsTr("source", "disambiguation") qsTr("source", "disambiguation", count) // count - some int value for source
qsTr()
,tr()
,QT\u tr\u NOOP()
,qstranlate()
,等等
我需要解析上述函数调用params的内容
例如,qsTr()
:
该函数只有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*\\))
由于贪婪的量词,上述正则表达式将失败。它将在全文中查找下一个“\\s*)”
。
有没有办法解决这个问题?事实上,可以在引号之间找到内容,然后再寻找答案) 图案看起来像
Pattern.compile("\\qsTr?\\s*\\(\\s*(((\".*?(?<!\\\\)\")|('.*?(?<!\\\\)')).*?)(?=\\))", Pattern.DOTALL);
您将获得下一个结果:
"source", count
然后,您可以检查提取的字符串的有效性(例如,如果qsTr函数可能在静态字符串param之后包含另一个参数)
Pattern.compile("\\qsTr?\\s*\\(\\s*(((\".*?(?<!\\\\)\")|('.*?(?<!\\\\)')).*?)(?=\\))", Pattern.DOTALL);
qsTr("source", count)
"source", count