【问题标题】:Qt Syntax Highlighter Example highlighting rule for single line commentsQt Syntax Highlighter Example 单行注释的高亮规则
【发布时间】:2015-03-27 16:35:03
【问题描述】:

取自 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]*\"*");

【问题讨论】:

  • 我也试过 rule.pattern = QRegExp("//([^\n]*)| (?!\")");

标签: c++ regex qt syntax-highlighting qt5.3


【解决方案1】:
/(\"(?:(?!\/\/).)+?\")/

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

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

希望对您有所帮助。

【讨论】:

  • 这还不够吗?:(\"[^/"]+\")
  • 但是你不能在双引号内放一个正斜杠。另外,我不认为非捕获组是必需的,但我没有研究是否在代码的其他地方利用了捕获组。
  • 这是输出:"all are black before //"其余的都是灰色
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-07
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
  • 1970-01-01
相关资源
最近更新 更多