字符串匹配中的正则表达式评估

时间:2016-05-09 10:42:11

标签: regex string

我正在阅读Robert Sedgwick的算法中的正则表达式。

这里提到正则表达式

A* | (A*BA*BA*)*

这里作者提到的匹配是:AAA,BBAABB和BABAAA。 与上述正则表达式不匹配的是ABA BBB BABBAAA。

我的问题是BBAABB是如何匹配的,以及BABAAA如何匹配。请解释一下。

一般情况下,我正在寻找如何使用|进行评估正则表达式中的*和*运算符。 在下面的例子中,如果我们有一个+,我们如何才能将b单独置于set中,因为它表示我们必须至少有一个a。

(a+b)* = (λ, a, b, aa, ab, ba, bb, aaa, ...)

1 个答案:

答案 0 :(得分:0)

*+之间存在一个区别。放置*后的字符不能重复。但在+情况下,它可以有至少1次重复。 在A* | (A*BA*BA*)*中,BBAABB有效,原因如下,并且符合(A*BA*BA*)*模式

  1. A
  2. 一开始就没有A*
  3. {B}代表BA*而没有A
  4. 1 B代表BA*和2 A
  5. *末尾的
  6. (A*BA*BA*)*表示该模式可以重复。所以第二次重复是BB,这是有效的
  7. 这些是BBAABB有效的点。