QRegExp和QSyntaxHighlighter的双引号文本

QRegExp and double-quoted text for QSyntaxHighlighter

本文关键字:文本 QSyntaxHighlighter QRegExp      更新时间:2023-10-16

为QSyntaxHighlighter捕获引号文本的QRegExp模式是什么?

测试模式

"one" or "two" or "three"

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

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

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

编辑:如果你查看语法高亮笔示例,已经在那里了。

http://qt project.org/doc/qt - 4.8/- richtext syntaxhighlighter -萤光笔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)来获得懒惰匹配的效果,而不是贪婪匹配,你可以成功。其他regex求值器使用*?+?之类的东西来执行延迟匹配。有时我用gskinner的regex引擎来测试我的表达式。

下面是你正在寻找的代码。它在很大程度上基于这里给出的例子。

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

希望对你有帮助。