正则表达式匹配 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 \b
oundary 来救援!以上是关于正则表达式匹配 C 语言数字的主要内容,如果未能解决你的问题,请参考以下文章