Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在用 lex 编写计算器,需要一个正则表达式来识别双打。应该怎么写?它应该类似于[[0 + [0-9][0-9]*].[0-9]+] + [1-9][0-9]*,但不能使其在 lex 中工作。
[[0 + [0-9][0-9]*].[0-9]+] + [1-9][0-9]*
样本输入是任何双精度或整数(将转换为双精度)
我看到几个问题:
空格在正则表达式中很重要:删除它们。
方括号 ( []) 表示字符类,而不是分组。使用括号进行分组。
[]
句点字符 ( .) 匹配任何内容,我相信您的意图是仅匹配句点字符(小数点),因此您需要使用反斜杠对其进行转义。
.
因此,将您的正则表达式更改为
((0+[0-9][0-9]*)\.[0-9]+)+[1-9][0-9]*
并从那时开始调试。
另外,我不确定您是否理解加号 ( ) 和竖线 ( ) 之间的区别,加号 ( +) 表示一个或多个重复,竖线字符 ( |) 表示非此即彼。
+
|