我真的没有看到表达式的区别。
任何字符串然后是:任何非空字符串
字母Σ:
{a, b, c}
我了解(a+b+c)*
可以是a, b, c
但另一个(a+b+c)
会产生什么不同?
这些答案取自一些演讲幻灯片。
有人可以解释为什么我们需要另一个(a+b+c)
吗?
谢谢!
答案 0 :(得分:3)
请记住,星号表示零次或多次出现。所以第一个例子可能会产生一个空字符串。但是,第二个字符串必须以a,b或c中的一个开头,然后可能是零个或多个其他字符,因此它的长度至少为一个字符。
答案 1 :(得分:1)
如果字符串只是“”,则该字符串可以为空。这是字符串的有效值,因此它将成为“任何字符串”的一部分。
答案 2 :(得分:1)
当您将Kleen star clouser应用于任何RE时,如果(a+b+c)*
,则会生成空字符串(长度= 0),因此当*
替换为0时,结果将为空串。为了摆脱那个空字符串,我们在(a+b+c)
之前放置(concat)(a+b+c)*
,以便(a+b+c)*
生成的每个字符串都以a or b or c
为前缀,这样我们就是确保此RE无法生成空字符串。