如何匹配Qt正则表达式中的连字符

时间:2013-01-16 01:11:51

标签: c++ regex qt

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");

如果我开始输入连字符,则连字符不会突出显示,并且每个其他字母都会突出显示。根据{{​​3}},这应该是犹太人。

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

1 个答案:

答案 0 :(得分:2)

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

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

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