1

我正在尝试匹配 Qt 中的数字以进行语法突出显示,并且我正在尝试以下正则表达式:

"[^a-fA-F_][0-9]+" // For numbers.
"[^a-fA-F_][0-9]+\\.[0-9]+" // For decimal numbers.
"[^a-fA-F_][0-9]+\\.[0-9]+e[0-9a-fA-F]+" // For scientific notation.
"[^a-fA-F_]0[xX][0-9a-fA-F]+" // For hexadecimal numbers.

但是文本是匹配的,例如 [1024,并且也突出显示了 [。我只想突出显示 1024 部分。

另一个问题是,当我键入 aoe2 和键入 aoe25 时,正则表达式会突出显示。当数字前面有字母或下划线时,我不想突出显示它,因为那样它将是一个标识符。

我该如何解决?

4

1 回答 1

4

好吧,[因为这个声明它匹配:

[^a-fA-F_]
This will match anything that is not the letters A-F(any case) or an underscore

如果这是你想要的,你为什么不只是匹配数字?

For integers:         \b\d+
For decimal numbers:  \b\d+.\d+
For scientific:       \b\d+e\d+
For hexadecimal:      \b[\dA-Fa-F]+

同样正如@Jan Dvorak 提到的,您可以使用单词边界\b,以确保您的匹配从单词(或数字)的开头开始。请参阅此处的示例:http ://regex101.com/r/kC6dK3

于 2013-01-05T19:29:08.293 回答