数值常数的正则表达式

时间:2010-06-21 13:42:59

标签: regex computation-theory

在Sipser的计算理论一书中,给出了以下内容:

可能包括小数部分的数值常数 和/或标志可以被描述为语言的成员

(+ U - U e)(D + U D +。D * U D * .D +)

其中D = {0,1,2,3,4,5,6,7,8,9}是十进制数字的字母。例子 生成的字符串是:72,3.14159,+ 7。和-.01。

在这里我无法理解结合D +或D *的目的是什么? 为什么还要添加第三个点?

请有人清楚我的怀疑。

1 个答案:

答案 0 :(得分:3)

它试图涵盖以下情况:

5    #matched by D+
.5   #matched by D*.D+
5.   #matched by D+.D*
5.5  #matched by both D*.D+ and D+.D*
.    #not matched

表达式中的.字符是小数点分隔符。您可以通过这种方式阅读表达式:

( + U - U e) ( (D+) U (D+ . D*) U (D* . D+) )