QRegExp和QSyntaxHighlighter的双引号文本
QRegExp and double-quoted text for QSyntaxHighlighter
为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();
}
希望对你有帮助。
相关文章:
- 文本文件中的单词链表
- 从命令行c++发送文本文件名
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何将内容数组写入文本文件?
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 将值从二维数组输出到文本文件
- 如何在c++中从文本文件中逐行读取整数
- 如何创建一个QTableWidgetItem,用长文本右对齐,左边有省略号
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何从文本文件中读取值和数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- 如何根据单词在文本中出现的概率输出单词
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- C++试图读取一个文件并输出到另一个文本文件
- 如何通过套接字将文本文件的内容从服务器发送到客户端