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*)"
по всему тексту. Есть идеи, как это исправить?