0

QRegExp 模式用于捕获 QSyntaxHighlighter 的引用文本是什么?

测试图案

“一”或“二”或“三”

到目前为止,我已经尝试过:

QRegExp rx("\\0042.*\\0042");
QRegExp rx("(\\0042).*?\\1");

最后一个模式在 regexpal.com 上成功,但在 QRegExp 类上没有成功。

4

1 回答 1

1

编辑:如果您查看Syntax Highlighter Example,那里已经有了这个。

http://qt-project.org/doc/qt-4.8/richtext-syntaxhighlighter-highlighter-cpp.html

 quotationFormat.setForeground(Qt::darkGreen);
 rule.pattern = QRegExp("\".*\"");
 rule.format = quotationFormat;
 highlightingRules.append(rule);

只需从 Qt 的荧光笔示例中复制大部分代码,您就应该做好准备了。

QRegEx 中的贪婪与懒惰匹配

在 Qt 对 RegEx 的变体的描述中,它说:

注意:量词通常是“贪婪的”。它们总是尽可能多地匹配文本。例如,0+ 匹配它找到的第一个零以及第一个零之后的所有连续零。应用于“20005”,它匹配“20005”。量词可以是非贪婪的,见 setMinimal()。

如果您使用setMinimal(true)惰性匹配而不是贪婪匹配来获得效果,则可以将其拉下来。其他正则表达式评估器使用类似*?or+?来执行惰性匹配。有时我使用gskinner 的正则表达式引擎来测试我的表达式。

以下是您正在寻找的代码。它很大程度上基于此处给出的示例。

#include <QCoreApplication>
#include <QRegExp>
#include <QDebug>
#include <QStringList>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString str = "\"one\" or \"two\" or \"three\"";

    QRegExp rx("\".*\"");
    rx.setMinimal(true);
     int count = 0;
     int pos = 0;
     while ((pos = rx.indexIn(str, pos)) != -1) {
         ++count;
         pos += rx.matchedLength();
         qDebug() << rx.cap();
     }

    return a.exec();
}

希望有帮助。

于 2013-04-18T05:42:28.263 回答