0

我正在用 lex 编写计算器,需要一个正则表达式来识别双打。应该怎么写?它应该类似于[[0 + [0-9][0-9]*].[0-9]+] + [1-9][0-9]*,但不能使其在 lex 中工作。

样本输入是任何双精度或整数(将转换为双精度)

4

1 回答 1

2

我看到几个问题:

  1. 空格在正则表达式中很重要:删除它们。

  2. 方括号 ( []) 表示字符类,而不是分组。使用括号进行分组。

  3. 句点字符 ( .) 匹配任何内容,我相信您的意图是仅匹配句点字符(小数点),因此您需要使用反斜杠对其进行转义。

因此,将您的正则表达式更改为

((0+[0-9][0-9]*)\.[0-9]+)+[1-9][0-9]*

并从那时开始调试。

另外,我不确定您是否理解加号 ( ) 和竖线 ( ) 之间的区别,加号 ( +) 表示一个或多个重复,竖线字符 ( |) 表示非此即彼。

于 2013-10-09T16:00:11.073 回答