【发布时间】:2017-09-07 07:29:19
【问题描述】:
我一直在努力理解关于两个联合表达式的闭包的一个关键属性。基本上我需要知道 Kleene 星是如何工作的。
IE 如果正则表达式 R = (0+1)* 表达式是否必须计算为 000111/01/00001111 之类的值,或者我们可以有不相等数量的 0 和 1,例如作为 0011111/000001/111111/0000?
【问题讨论】:
我一直在努力理解关于两个联合表达式的闭包的一个关键属性。基本上我需要知道 Kleene 星是如何工作的。
IE 如果正则表达式 R = (0+1)* 表达式是否必须计算为 000111/01/00001111 之类的值,或者我们可以有不相等数量的 0 和 1,例如作为 0011111/000001/111111/0000?
【问题讨论】:
0 和 1 的数量可以不相等;您甚至可以按任意顺序排列 0 和 1! a* 表示“零个或多个as,其中每个a 都是独立评估的”;因此,在匹配(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)+ ...。
【讨论】: