我知道根据左分布规则,这个正则表达式: A ( B + C )
可以这样写:AB+AC
我的问题是下一个。在这个例子中可以使用左分配规则吗: A ( B + C* )
这样我就可以得到: AB + A(C*)
或者我得到这样的东西:AB + AC *
谢谢
我知道根据左分布规则,这个正则表达式: A ( B + C )
可以这样写:AB+AC
我的问题是下一个。在这个例子中可以使用左分配规则吗: A ( B + C* )
这样我就可以得到: AB + A(C*)
或者我得到这样的东西:AB + AC *
谢谢
AB + A(C*)绝对正确(并且AB + AC*几乎可以肯定也是正确的,取决于 的优先级*)。
有问题的正则表达式是A ( B + C* )⇔ A ( B + (C*) )。如果我们使用c=C*作为替代,我们可以将原始的正则表达式写为A ( B + c ),现在很明显我们可以使用左分配规则。一口气完成所有步骤:
A ( B + C* ) <=> A ( B + (C*) ) <=> AB + A(C*) <=> AB + AC*
(出于教学目的,这里的工作比必要的要多,我用<=>的是“等同于”的意思。)
我们也可以只看有问题的正则表达式匹配什么(这不是证明,但它很好地证明了它们是等价的):
A(B + C*)匹配A后跟单个B或任意数量的Cseg AB, A, AC, ACC, ACCC...AB + A(C*)匹配任意数量AB的seg , , , , ...ACABAACACCACCC这些是完全一样的。
据我所知A(B+C*)是不一样的AB + A(C*)。第一个表达式匹配 ABBBBBBBBBBBBB 或 ABBBBBBBBBBBC 等字符串 第二个表达式匹配 ABBBBBBBBBBBA 或 ABBBBBBBBBBBACCCCCCCCCCC 等字符串
AB + A(C*) 这个是正确的,因为
C* 表示 0 或更多(你有 0 或 C 的倍数) C+ 表示 1 或更多(至少一个 c 或多个)