QRegExp和QSyntaxHighlighter的双引号文本

时间:2013-04-18 02:13:03

标签: c++ regex qt qregexp

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

测试模式

  

“一”或“两个”或“三个”

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

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

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

1 个答案:

答案 0 :(得分: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)来获得延迟匹配而不是贪婪匹配的效果,你可以将它拉下来。其他正则表达式评估程序使用*?+?之类的内容来执行惰性匹配。有时我使用gskinner's regex engine来测试我的表达式。

以下是您要查找的代码。它主要基于here给出的示例。

#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();
}

希望有所帮助。