【问题标题】:QRegExp and double-quoted text for QSyntaxHighlighterQSyntaxHighlighter 的 QRegExp 和双引号文本
【发布时间】:2013-04-18 02:13:03
【问题描述】:

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

测试模式

“一”或“二”或“三”

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

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

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

【问题讨论】:

  • 加引号还是不加引号?
  • 匹配项应包含引号。

标签: c++ regex qt qregexp


【解决方案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();
}

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2019-12-17
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    相关资源
    最近更新 更多