0

取自 Qt Syntax Highlighter 示例:

//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

如您所见,结果是:引号内部将是灰色的,包括双 / 。但是“”之外的字符变成了darkGray,它应该是默认字体颜色(通常是黑色)。我如何调整单行注释的正则表达式,以便它知道绿色“//”不受暗灰色突出显示规则的约束?

我试图为单行注释规则添加这个:

rule.pattern.setMinimal(true);

还是不行。我也试过:

rule.pattern = QRegExp("//[^\n]*\"*");
4

1 回答 1

0
/(\"(?:(?!\/\/).)+?\")/

利用非捕获组和负面展望的魔力,我设计了以下内容:

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

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

应用了魔法,你就会得到你正在寻找的行为。

参考:

https://stackoverflow.com/a/977294/999943

http://regexr.com/3an21

并在此示例中进行了测试:

http://doc.qt.io/qt-5/qtwidgets-richtext-syntaxhighlighter-example.html

希望有帮助。

于 2015-03-27T18:24:57.207 回答