正则表达式使用以下语言

时间:2013-05-05 12:16:27

标签: regular-language

字母E = {a,b,c}

问题与答案: http://d.pr/i/3N41

image

我知道我们必须在外面有两个a但是为什么我们有[]* - 这些特殊表达式会做什么?除此之外,我不太清楚这意味着什么http://d.pr/i/uff7 - { w | |W|}它只是一个将语言放入的变量?

非常感谢任何帮助!

3 个答案:

答案 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正则表达式不同)但我们通常在封闭部分内部有括号时使用它们以增强可读性。星号适用于前面方括号中的孔块。

答案 1 :(得分:2)

首先回答问题的后半部分,该表达式可以描述如下:

语言 L a 由单词 w 组成,其中 w 的长度为3的倍数和 w aa 开头。

垂直条引入了 w 必须满足的条件才能包含在集合中。

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

然后看看答案,你有 aa ,因为这就是这个词必须以什么开头,然后是另一个字母( a b c ),给你一个3个字母的单词匹配。

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

答案 2 :(得分:0)

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

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