Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QSyntaxHighlighter的QRegExp和双引号文本_C++_Regex_Qt_Qregexp - Fatal编程技术网

C++ QSyntaxHighlighter的QRegExp和双引号文本

C++ QSyntaxHighlighter的QRegExp和双引号文本,c++,regex,qt,qregexp,C++,Regex,Qt,Qregexp,QRegExp模式用于捕获QSyntaxHighlighter的引用文本是什么 测试模式 “一”或“二”或“三” 到目前为止,我已经尝试: QRegExp rx("\\0042.*\\0042"); QRegExp rx("(\\0042).*?\\1"); 最后一个模式在regexpal.com上成功,但在QRegExp类中不成功。编辑:如果您签出,则其中已包含此模式 只需从Qt的highlighter示例中复制大部分代码,就可以进行设置 贪婪的,贪婪的。QRegEx中的惰性匹配 在Reg

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

测试模式

“一”或“二”或“三”

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

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

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

编辑:如果您签出,则其中已包含此模式

只需从Qt的highlighter示例中复制大部分代码,就可以进行设置

贪婪的,贪婪的。QRegEx中的惰性匹配 在RegEx上Qt变化的描述中,它说:

注意:量词通常是“贪婪的”。它们总是尽可能多地匹配文本。例如,0+匹配它找到的第一个零以及第一个零之后的所有连续零。应用于“20005”,它与“20005”匹配。量词可以设置为非贪婪的,请参见setMinimal()

如果您使用
setMinimal(true)
来获得惰性匹配而不是贪婪匹配的效果,那么您可以实现它。其他正则表达式计算器使用类似于
*?
+?
的方法来执行延迟匹配。有时我用它来测试我的表情

下面是您正在查找的代码。这在很大程度上是基于给出的例子

#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
qcorea应用程序(argc、argv);
QString str=““一”或“二”或“三”;
QRegExp rx(“\”*\”);
rx.setMinimal(真);
整数计数=0;
int pos=0;
而((位置=rx.indexIn(str,pos))!=-1){
++计数;
pos+=rx.matchedLength();

qDebug()带引号还是不带引号?匹配项应包括引号。
 quotationFormat.setForeground(Qt::darkGreen);
 rule.pattern = QRegExp("\".*\"");
 rule.format = quotationFormat;
 highlightingRules.append(rule);
#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();
}