1

我真的看不出这里的表达方式有什么不同。

任何字符串,然后有:任何非空字符串

字母Σ

{a, b, c}

我知道这(a+b+c)*可以是a, b, c

但是另一个有什么不同(a+b+c)呢?

在此处输入图像描述

这些答案摘自一些演讲幻灯片。

有人可以解释为什么我们需要另一个(a+b+c)吗?

谢谢!

4

3 回答 3

3

请记住,星号代表零次或多次出现。所以第一个例子可能会导致一个空白字符串。但是,第二个字符串必须以 a、b 或 c 之一开头,然后可能是零个或多个其他字符,因此它的长度至少为一个字符。

于 2013-05-06T13:59:37.753 回答
1

如果字符串只是“”,则字符串可以为空。这是字符串的有效值,因此它属于“任何字符串”类别的一部分。

于 2013-05-06T13:58:32.243 回答
1

当你将 Kleen star clouser 应用到任何 RE 时,它会在 的情况下产生空字符串(长度 = 0)(a+b+c)*,所以当*被 0 替换时,结果将是空字符串。为了去掉这里的空字符串,我们将 (concat) 放在了(a+b+c)之前(a+b+c)*,这样由 产生的每个字符串(a+b+c)*都以 any 为前缀a or b or c,这样我们就可以确保这个 RE 不能产生空字符串。

于 2013-05-06T14:08:46.497 回答