正则表达式匹配 C 语言数字

Posted

技术标签:

【中文标题】正则表达式匹配 C 语言数字【英文标题】:Regex expression to match C language numbers 【发布时间】:2013-01-05 19:23:59 【问题描述】:

我正在尝试匹配 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 时,正则表达式会突出显示。当数字前面有字母或下划线时,我不想突出显示它,因为那样它将是一个标识符。

我该如何解决?

【问题讨论】:

没有从字符串中解析数字的函数吗?我至少知道strtoul,d(),但 Qt 可能还有更多? 你能提供一些示例文本和你想要的匹配吗?例如,您要匹配这些字符串中的哪一个? “aoe2”、“aoe25”、“1024”、“[1024” 我想获取数字在字符串上的位置,而不是数字本身,因为这样 Qt 引擎会突出显示这些位置的字符。 不知道C++正则表达式是否支持,但是这里需要负前瞻。 我只想匹配 C 数字,例如:1024、4856、284.582、0x48e14、42.42e42 等。但是当这些数字在标识符中时,正则表达式不应该匹配,例如“aoe45” , 并且当它们前面有运算符时应该匹配(仅数字),例如“[1024]”或“+24”。 【参考方案1】:

因为这个声明,它匹配[

[^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

【讨论】:

他不想匹配例如 aoe25 等变量中的数字 好吧,那我应该使用否定的lookbehind吗?我怎么能这么写,因为 Qt 似乎无法识别 (? @RenatoUtsch.. 好吧,你不需要消极的后视,而是消极的前瞻,比如:-(?![a-fA-F_])。但可能这也不会被支持。 是的,Qt 似乎不支持负向后视,也许我毕竟需要 libpcre ......伤心,多了一个依赖。 Word \boundary 来救援!

以上是关于正则表达式匹配 C 语言数字的主要内容,如果未能解决你的问题,请参考以下文章

c语言实现正则表达式匹配

易语言如何用正则表达式来读取制定的网页文本 最好源码上,谢谢

求一个PHP正则表达式匹配(字母、数字、汉字、下划线)

正则表达式

用正则表达式验证只能有数字

关于浮点数的正则表达式?