Qt 5.12.0
Я использую класс, производный от QSyntaxHighlighter, чтобы выделить текст в виджете QTextEdit. Я переопределил highlightBlock(const QString & text)
функция, и я пытаюсь сделать многострочное регулярное выражение с использованием QRegularExpression.
QTextCharFormat format;
format.setForeground(QColor(0xFF, 0x00, 0x00));
auto opt = QRegularExpression::MultilineOption;
auto regex = QRegularExpression("a(.|\\n)*a", opt);
QRegularExpressionMatchIterator it = regex.globalMatch(text);
while (it.hasNext())
{
QRegularExpressionMatch match = it.next();
setFormat(match.capturedStart(), match.capturedLength(), format);
}
Это соответствует любой строке, которая начинается и заканчивается буквой a
, но только в одной строке. Я пробовал несколько вариантов, в том числе:
auto opt = QRegularExpression::DotMatchesEverythingOption | QRegularExpression::MultilineOption;
auto regex = QRegularExpression("a.*a", opt);
…
auto opt = QRegularExpression::MultilineOption;
auto regex = QRegularExpression("(?m)a(.|\\r|\\n)*a", opt);
…
auto opt = QRegularExpression::NoPatternOption;
auto regex = QRegularExpression("(?m)a(.|\\r|\\n)*a", opt);
Ни одна из этих работ. Многострочные регулярные выражения просто не работают в Qt, или я делаю что-то не так?
Задача ещё не решена.
Других решений пока нет …