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中损坏了,还是我做错了什么?