2

Windows 7 SP1
MSVS 2010
Qt 4.8.4

我正在试验 Qt Syntax Highlighter Example

我有一个应用程序需要突出显示以连字符开头的单词。所以我修改了这段代码片段的正则表达式:

classFormat.setFontWeight(QFont::Bold);
classFormat.setForeground(Qt::darkMagenta);
rule.pattern = QRegExp("\\bQ[A-Za-z]+\\b");
rule.format = classFormat;
highlightingRules.append(rule);

突出显示以 Q 开头的单词。我将其更改为:

rule.pattern = QRegExp("\\b-[A-Za-z]+\\b");

什么也没有发生。

我试试

rule.pattern = QRegExp("\\b\\-[A-Za-z]+\\b");

没有。

出于好奇,我尝试

rule.pattern = QRegExp("\\b[-A-Za-z]+\\b");

如果我开始输入连字符,则连字符不会突出显示,并且每个其他 alpha 都会突出显示。根据如何将连字符与正则表达式匹配?这应该是犹太教的。

问题:如何编写正则表达式来突出以连字符开头的单词?

4

1 回答 1

3

问题是连字符-被认为不是单词的一部分。这意味着,单词边界断言 \b将在连字符和实际单词之间匹配。换句话说:没有以连字符开头的单词。

要解决此问题,请将连字符放在之前 \b,表示您要匹配“一个连字符,后跟一个由字母组成的单词”。您甚至可以删除第一个\b,因为[a-zA-Z]+无论如何都是一个词:

rule.pattern = QRegExp("-[A-Za-z]+\\b");
于 2013-01-16T01:17:34.800 回答