C++ Qt语法高亮显示单行注释的高亮显示规则示例

C++ Qt语法高亮显示单行注释的高亮显示规则示例,c++,regex,qt,syntax-highlighting,qt5.3,C++,Regex,Qt,Syntax Highlighting,Qt5.3,摘自Qt语法高亮示例: //single line comment rule singleLineCommentFormat.setForeground(Qt::darkGray); rule.pattern = QRegExp("//[^\n]*"); rule.format = singleLineCommentFormat; highlightingRules.append(rule); //string rule quotationFormat.setForeground(Qt::dar

摘自Qt语法高亮示例:

//single line comment rule
singleLineCommentFormat.setForeground(Qt::darkGray);
rule.pattern = QRegExp("//[^\n]*");
rule.format = singleLineCommentFormat;
highlightingRules.append(rule);
//string rule
quotationFormat.setForeground(Qt::darkGreen);
rule.pattern = QRegExp("\".*\"");
rule.pattern.setMinimal(true);
rule.format = quotationFormat;
highlightingRules.append(rule);
问题是当你有这样的东西时:

"inside is darkGreen//"outside is darkGray
如您所见,结果是:包括double/在内的引号将为灰色。但“”之外的字符变为暗灰色,这应该是默认字体颜色(通常为黑色)。如何调整单行注释的RegExp,使其知道绿色“/”不受暗光线突出显示规则的约束

我尝试为单行注释规则添加以下内容:

rule.pattern.setMinimal(true);
还是不行。我还尝试:

rule.pattern = QRegExp("//[^\n]*\"*");
利用非捕捉群体和负面形象的魔力,我设计了以下项目:

quotationFormat.setForeground(Qt::darkGreen);
rule.pattern = QRegExp("\"(?:(?!\\/\\/).)+\"");//QRegExp("\".*\"");

rule.pattern.setMinimal(true);
rule.format = quotationFormat;
highlightingRules.append(rule);
施展魔法,你就会得到你想要的行为

参考资料:

并在本例中进行了测试:


希望能有所帮助。

我也试过rule.pattern=QRegExp(“//([^\n]*))|(?!\”);这还不够吗?:
(\“[^/”]+\”
但是你不能在双引号中加上一个正斜杠。另外,我不认为需要非捕获组,但我没有研究捕获组是否在代码中的其他地方被利用。这是输出:“所有在//之前都是黑色的”,其余都是灰色的
quotationFormat.setForeground(Qt::darkGreen);
rule.pattern = QRegExp("\"(?:(?!\\/\\/).)+\"");//QRegExp("\".*\"");

rule.pattern.setMinimal(true);
rule.format = quotationFormat;
highlightingRules.append(rule);