正则表达式A(B + C *)== AB + A(C *)

时间:2012-05-03 09:10:20

标签: regex

我知道左派分布规则这个正则表达式: A(B + C)

可写成这样: AB + AC

接下来是我的问题。在这个例子中可以使用左分布规则: A(B + C *)

这样我才能得到: AB + A(C *)

或者我得到这样的东西: AB + AC *

由于

3 个答案:

答案 0 :(得分:5)

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或任意数量的C。例如ABAACACCACCC ......
  • AB + A(C*)匹配ABA,后跟任意数量的C。例如ABAACACCACCC ......

那些是完全相同的。

答案 1 :(得分:1)

据我所知A(B+C*)AB + A(C*)不同。 第一个表达式匹配ABBBBBBBBBBBB或ABBBBBBBBBBBC等字符串 第二个表达式匹配ABBBBBBBBBBB或ABBBBBBBBBBBACCCCCCCCCCC等字符串

答案 2 :(得分:0)

AB + A(C *)这个是正确的,因为

C *表示0或更多(你有0或多个C) C +表示1个或更多(至少一个c或多于一个)