QRegExp 模式用于捕获 QSyntaxHighlighter 的引用文本是什么?
测试图案
“一”或“二”或“三”
到目前为止,我已经尝试过:
QRegExp rx("\\0042.*\\0042");
QRegExp rx("(\\0042).*?\\1");
最后一个模式在 regexpal.com 上成功,但在 QRegExp 类上没有成功。
编辑:如果您查看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 的荧光笔示例中复制大部分代码,您就应该做好准备了。
在 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();
}
希望有帮助。