首页 > 解决方案 > QRegularExpression 如何使用多行模式?

问题描述

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 中被破坏,或者我做错了什么?

标签: c++regexqtqt5qregularexpression

解决方案


推荐阅读