我被告知正则表达式生成的语言:
(a*b*)*
是正常的。
然而,我的想法与此相反,如下所示。任何人都可以请说明我的想法是对还是错?
我的想法
(a*b*)
是指任意数量a
的单个序列,后跟任意数量的b
(可以为空)。并且该单个序列(不能改变)可以重复0次或更多次。例如:
a* = a
b* = bbbb
-> (a*b*) = abbbb
-> (a*b*)* = abbbbabbbbabbbb, ...
另一方面,由于aba
不是序列ab
的精确重复,因此它不包含在语言中。
aaabaaabaaab => is included in the language
aba => is not included in the language
因此,该语言由序列组成,这些序列是子序列的任意时间重复,该子序列是任意数量的a
,后跟任意数量的b
。因此,语言不规则,因为它需要堆栈。
答案 0 :(得分:4)
a
为零次或多次,然后是b
零次或多次,重复零次或多次。
""
"a"
"b"
"ab"
"ba"
"aab"
"bbabb"
"aba"
全部通过。
答案 1 :(得分:1)
*
不是+
。
aba
是那种语言;说“由a
和b
s组成的所有字符串的集合只是一种过于复杂的方式。”
编辑:重复组并不意味着必须严格重复该组的内容;这需要反向引用。 ((a*b*)?\1*
)
相反,它意味着应该重复组本身,匹配它可以匹配的任何字符串。
答案 2 :(得分:0)
你错了。 :)
0也是一个数量,所以aba就是这种语言。如果正则表达式是(a + b +)+,则不会,因为+表示'1或更多',其中*表示'0或更多'。
答案 3 :(得分:0)
技术上/(a * b *)* /将匹配所有内容,无需任何内容。
因为所有运算符都是*,所以它意味着零或更多。所以,由于零是一个选项,它几乎可以匹配任何东西。
答案 4 :(得分:0)
这是错的,你不需要堆叠。你的DFA只是认为“我可以添加另一个(或不是)吗?”或者“我可以只添加另一个b(或不是)吗?”在无休止的循环中,直到消耗掉这个词。
答案 5 :(得分:0)
这是一个正则表达式,是的。
*
说“可以重复0次或更多次”。 +
基本相似,不同之处仅在于它需要在最小值上重复一次(或者是1次或更多次)。
这个正则表达式说,有些想法:
"below group"
零次或多次;
a
零次或多次; b
零次或多次; 可以适用于所有示例。
修改/注意:aba
也已经过验证。
我希望能提供帮助:p
答案 6 :(得分:0)
基本上,它会匹配任何空的字符串或由一堆a和b组成的字符串。它写着:
(('a' zero or + times)('b' zero or + times) zero of plus times
这就是为什么它匹配aba
:
(('a' one time)('b' one time)) one time ((a one time)(b zero time)) one time