0

我正在通过阅读 Aho 的书来学习正则表达式。我不明白书中的两个陈述:

问题一:

1(0+1)*1 + 1 : denotes the set of all strings beginning and ending with a 1.

我的问题为什么要+1在正则表达式的末尾添加?应该1(0+1)*1不够吧?


我也遇到以下问题:

问题乙:

仅包含 0 和 1 且最多有一个 1 的字符串集,如下所示

    0*+0*10* 

0*+0*10*您能逐步解释解决方案是如何得出的吗?

4

3 回答 3

3

关于问题a:1(0+1)*1 不匹配以1 开头和结尾的单字符字符串1。需要特殊情况,示例就是这样做的。

关于问题b:我不能代表作者发言。但是......任何最多包含一个 1 的字符串都是一个没有 1 或恰好有一个 1 的字符串。假设字母表是 {0,1},前者意味着任何包含零个或多个 0 的字符串,即是,0*。后者,在相同的假设下,表示任何包含零个或多个 0 后跟一个 1 后跟零个或 mpre 0 的字符串,即 0*10*。结合这些产生示例。

于 2011-11-11T12:47:21.233 回答
2

对于问题 a1(0+1)*1表示所有以 1 开头和结尾的字符串的集合,但不包含1长度为 1 且以 1 开头和结尾的字符串。

对于问题 b:最多包含一个的字符串集合1= A+B其中 A是包含零1的所有字符串的集合,并且 B是包含恰好包含一个的所有字符串的集合1

所以 A 是0*,B 是0*10* 因此我们得到的答案是0* + 0*10*

于 2011-11-11T12:46:49.107 回答
0

对于第一个示例,+1 接受但其余部分不接受的字符串是1. 其余的表达式可以处理 11,但不能处理第一个和最后一个字符相同的字符串。

第二个字符串的推理类似 - 0* 处理全为零的字符串, 0*10* 处理 1 个 1 的字符串。

于 2011-11-11T12:51:00.290 回答