如何用英语描述这个正则表达式

时间:2014-03-01 04:57:44

标签: regex formal-languages

我试图用英语描述正则表达式,

让我们说(b(bb)*)*

你会说:zero or more b's

或者我们可以(a(aa)*b(bb)*)*

你会说:odd number of a's that end in odd number of b's

现在我的问题是关于((a+b)a)*

你会说:words of even length where every even letter is an 'a'

偶数长度来自哪里?他们怎么得到每一个字母都是'a'?它是从零开始的,因为零是偶数?

3 个答案:

答案 0 :(得分:4)

((a+b)a)*

“你会说:每个偶数字母都是'a'的偶数长度的单词

这不是正确的描述。更准确的是“至少有一个a 的单词,其后只有一个b ,然后只有一个{{ 1}} ,零次或多次“

a表示“一个或多个”,+表示“零或更多”。)

更多关于*a s的来回 - b之间可能有数百万a s,但是从来没有b s { {1}}彼此相邻。

请注意,不需要内括号。换句话说,这是等价的:

b

自由间隔:

(a+ba)*

答案 1 :(得分:3)

如果您将表达式a+b解释为ab,则说明准确的唯一方法就是。大多数正则表达式工具都使用竖线来编写,如a|b中所示。其他评论者和回答者将+解释为后缀运算符,意思是“一个或多个”。

使用该读数,该集合中的每个字符串必须具有均匀长度的原因是因为重复超出了长度为2的字符串。它表示“aa或ba的零个或多个副本”。显然,与该描述相匹配的每个单词都是均匀的。根据定义,0是偶数,每隔一个字母必须是a

{¢,aa,ba,aaaa,aaba,baaa,baba,...}

答案 2 :(得分:0)

OP,您的问题基于讲座和文本的课程,其中+旨在作为OR操作。文字和讲座材料清楚地表明了符号的含义......

(b(bb)*)* = 0-n b后跟0-n bb。换句话说,零个或多个b。

(a(aa)*b(bb)*)*遵循模式2n + 1 a跟随2n + 1 b,如果                   不是空字符串。

((a+b)a)*更加含糊不清,即可以说更多的事情             回答,但答案也不能说是错的。这是全部了             由所有a或a和b组成的均匀长度的单词。我猜             是这个答案会得到部分信用,而且是完整的             包括关于作为偶数字母的部分的功劳。