我一直在努力理解关于两个union'ed表达式的关闭的一个关键属性。基本上我需要确切知道Kleene星是如何工作的。
I.E 如果正则表达式R =(0 + 1)*表达式是否必须评估为类似000111/01/00001111,或者我们是否可以得到不等量的0& 1,如0011111/000001/111111/0000?
答案 0 :(得分:2)
0和1的数量可能不相等;你甚至可以按任何顺序拥有0和1! a*
表示"零个或多个a
s,其中每个a
都是独立评估的,并且#34 ;;因此,在匹配(0+1)*
的字符串中,每个字符都可以匹配(0+1)
,而不考虑字符串中其他字符如何匹配它。
考虑模式(0+1)(0+1)
;它匹配字符串00
,01
,10
和11
。正如您所看到的,0和1不必以相同的数量发生,并且不必以任何特定的顺序发生。 Kleene星将其扩展为任意长度的弦;毕竟,(0+1)*
只意味着<empty>+(0+1)+(0+1)(0+1)+(0+1)(0+1)(0+1)+ ...
。