Как использовать многострочные шаблоны с QRegularExpression? - PullRequest
0 голосов
/ 16 декабря 2018

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, или я что-то не так делаю?

...