我真的看不出这里的表达方式有什么不同。
有任何字符串,然后有:任何非空字符串
字母Σ:
{a, b, c}
我知道这(a+b+c)*
可以是a, b, c
但是另一个有什么不同(a+b+c)
呢?
这些答案摘自一些演讲幻灯片。
有人可以解释为什么我们需要另一个(a+b+c)
吗?
谢谢!
我真的看不出这里的表达方式有什么不同。
有任何字符串,然后有:任何非空字符串
字母Σ:
{a, b, c}
我知道这(a+b+c)*
可以是a, b, c
但是另一个有什么不同(a+b+c)
呢?
这些答案摘自一些演讲幻灯片。
有人可以解释为什么我们需要另一个(a+b+c)
吗?
谢谢!
请记住,星号代表零次或多次出现。所以第一个例子可能会导致一个空白字符串。但是,第二个字符串必须以 a、b 或 c 之一开头,然后可能是零个或多个其他字符,因此它的长度至少为一个字符。
如果字符串只是“”,则字符串可以为空。这是字符串的有效值,因此它属于“任何字符串”类别的一部分。
当你将 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 不能产生空字符串。