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