使用正则表达式查找幻数

Posted

技术标签:

【中文标题】使用正则表达式查找幻数【英文标题】:Finding Magic Numbers With Regex 【发布时间】:2012-07-31 00:28:29 【问题描述】:

我正在使用语法高亮控件,我必须使用正则表达式指定所有高亮显示的内容。我已经完成了其他所有内容(关键字、函数、字符串、cmets 等),但我无法为幻数提出一个好的规则。如果有帮助的话,我会将它用于 Lua 文本编辑器。

我目前正在使用\d+ 来检测数字,但问题是我最终得到了这样的结果:

如您所见,我的变量名也突出显示了其中的一部分。

有没有人知道让这个特定规则正常工作的方法?

【问题讨论】:

【参考方案1】:

您不希望它在名称中匹配,因此添加一个单词边界:\b\d+\b

对于浮点数,可能有小数部分:\b\d+(?:\.\d+)?\b

对于浮点数,还可以有一个指数:\b\d+(?:\.\d+)?(?:[Ee][+\-]?\d+)\b

【讨论】:

对于整数,十六进制常量可以有一个0x 前缀,并且后面的字符比十进制数字还要多。【参考方案2】:

我想说在正则表达式方面保持简单(即只写你需要的东西,不要再写了)。以下将第 2 组匹配到正在分配的浮点数和整数:

(=\s*)([\d|\.]+)(\s*;)
第 1 组:上下文在“=”符号之后开始,占任何额外的 空白(\s*)。 第 2 组:将匹配 1 个或多个数字 (\d)或句点(.)。 第 3 组:上下文以 ';' 结尾, 考虑它之前的任何额外空白(\s*)。

希望对您有所帮助。

【讨论】:

以上是关于使用正则表达式查找幻数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用正则表达式查找'/*N*/'

正则表达式 3 -- 查找

Django 使用查询集和正则表达式查找重复项

使用正则表达式查找字符模式

如何使用正则表达式查找重叠匹配?

使用正则表达式查找哈希表/字典/地图