【问题标题】:Regular expression over the following language以下语言的正则表达式
【发布时间】:2013-05-05 12:16:27
【问题描述】:

字母 E = {a, b, c}

问答:http://d.pr/i/3N41

我知道我们必须在外面有两个 a,但为什么我们有 []* - 这些对这个特定的表达式有什么作用?除此之外,我不太确定这是什么意思 http://d.pr/i/uff7 - { w | |W|} 只是将语言放入其中的变量吗?

非常感谢任何帮助!

【问题讨论】:

  • 保罗改为链接图片,您可以用图片发布问题
  • 谢谢,上次没有代表做 :)

标签: regular-language


【解决方案1】:

要先回答你的后半部分问题,可以这样描述:

语言La由一组词w组成,其中w的长度为3 的倍数和 waa 开头。

竖线介绍了w必须满足的条件才能被包含在集合中。

第二个w两侧的条表示长度。

然后看答案,你有aa,因为这是单词必须以那个开头,然后是另一个字母(ab em> 或 c),给你一个匹配的 3 个字母的单词。

之后,任何其他单词都需要有额外的 3 个字母,每个字母可以是 abc。所以星号 (*) 表示这可能发生 0 次或多次,而方括号 [] 只是表示星号适用于表达式的哪一部分。

【讨论】:

    【解决方案2】:

    我在 Bash 中的写法是 aa[abc]([abc][abc][abc])* 这意味着 令牌应以“aa”开头,后跟'a''b''c' 因此( aa[abc] )

    [abc] 等价于 (a + b + c) 在正式表示中意味着 'a''b''c'

    x* 表示'x' 任意次数,包括零次

    所以([abc][abc][abc])* 表示(('a' or 'b' or 'c') 三次)发生任意次数。

    正式的表达方式是[(a+b+c)(a+b+c)(a+b+c)]*

    方括号类似于普通括号(例如,与 Bash 或 Javascript 正则表达式不同),但我们通常在封闭部分内部已经有括号时使用它们以增强可读性。星号适用于它前面的方括号中的孔块。

    【讨论】:

      【解决方案3】:

      在这种情况下,[...] 是对三个字母系列进行分组,* 表示出现 0 次或多次。

      你有“aa”,然后你必须有一个字母,所以有(a+b+c),其余是可选的。

      【讨论】:

      • 为什么我们需要对三个字母系列进行分组呢? 0 或更多究竟是什么?
      • 三个字母的 0 次或多次重复,例如“aaa”、“abc”等
      • 所以它会重复,所以它是 3 的倍数?用 [] 分组的原因是什么?据我所知,如果我要从我能得到的答案中选择:aababc(随机选择)但 * 有什么区别?还是有点迷茫。
      • 这样既可以是aababc,也可以是aababcacbbca
      • 我明白了,谢谢!最后一个问题,我之前没有遇到过[],使用它们的具体原因是什么?
      猜你喜欢
      • 2017-02-11
      • 2013-11-18
      • 2016-02-23
      • 2011-01-31
      • 2013-04-27
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      • 2016-12-02
      相关资源
      最近更新 更多