首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为C数值文字编写正则表达式

为C数值文字编写正则表达式
EN

Stack Overflow用户
提问于 2010-10-10 10:11:38
回答 3查看 3K关注 0票数 0

我的作业是用C编程语言编写一个表示数值语言的正则表达式。我可以使用l表示字母,d表示数字,a表示+,m表示-,p表示点。假设表达式的任何部分的连续位数都没有限制。

有效数字文字的一些示例是13.,.328,41.16,+45.80,-2.e+7,-.4E-7,01E-06,+0

我想出了:(d+p+a+m)(d+p+E+e+a+m)*

update2:(l+d+p+a+m)(d+p+((E+e)(a+m+d)d*) )*我不确定如何防止像1.0.0.0eee-e1这样的东西。

EN

回答 3

Stack Overflow用户

发布于 2010-10-10 10:14:39

您的正则表达式不支持各种后缀(luf等),也不支持十六进制或八进制常量。

前导符号(数字前面的+- )在词汇上不是常量的一部分;它们是一元+-运算符。实际上,所有整型和浮点型常量都是正数。

如果您需要完全支持C99浮点常量,则需要支持十六进制指数(p而不是e)。

您的正则表达式还接受许多无效的字符序列,如1.0.0.0eee-e1

一个匹配所有C整型和浮点型文字的正则表达式会很长。

票数 3
EN

Stack Overflow用户

发布于 2010-10-10 11:22:53

未经测试,但这至少应该是沿着正确的小数行。(此外,它接受字符串".",或者我认为它无论如何都接受字符串“.”;为了解决这个问题,它将消除integer和FP之间的最后一个公共代码,即前导[0-9]*。)

如果你看到一个缺陷,请不要投反对票。请留下建设性的评论,我会让这个社区维基。

代码语言:javascript
复制
[0-9]*([0-9]([uU](ll?+LL?)+(ll?+LL?)?[uU]?)+(\.[0-9]*)?([eE][+-]?[0-9]+)[fFlL])
票数 1
EN

Stack Overflow用户

发布于 2010-10-10 10:50:30

此正则表达式将满足您的所有需求:

代码语言:javascript
复制
  [+-]?(?P<Dot1>\.)?\d+(?(Dot1)(?#if_dot_exist_in_the_beginning__do_nothing)|(?#if_dot_not_exist_yet__we_accept_optional_dot_now)(?P<Dot2>\.)?)\d*(?P<Exp>[Ee]?)(?(Exp)[+-]?\d*)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3898721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档