什么是在{a,b}上没有生成的正则表达式?

时间:2010-04-20 22:20:06

标签: regex string regex-negation

我现在真的被这两个问题困住了2天多了。我想弄明白这个问题意味着什么。我的导师也不在城里。

问题1:通过表达式(a+b)****a(a+b)****为{a,b}生成的唯一字符串编写正则表达式。解释你的推理。

我尝试了第二个问题。你认为有没有比这更好的答案?

包含奇数个a s或正好两个b s (a((a|b)(a|b))****|bb)的一组字符串的正则表达式是什么?我知道它代表a的任何奇数长度, RE是a((a|b)(a|b))****

5 个答案:

答案 0 :(得分:1)

这是第一个问题的开始。首先考虑这个正则表达式生成的字符串:

(a+b)*a(a+b)*
  • 必须以a AND
  • 开头
  • 每个b必须在其前面至少有一个a AND
  • 必须有aab或者字符串必须以a结尾。

相反的是:

  • 不得以a OR
  • 开头
  • b OR
  • 之后至少有一个a
  • 该字符串仅包含重复ab

对于第二个问题,您应该检查您是否正确理解了问题。你的解释似乎是:

  

包含(奇数个和任意数量的b)或(正好两个b和没有a )的字符串集的正则表达式是什么。

但另一种解释是:

  

包含(奇数个和任意数量的b)或(正好两个b和任意数量的)的字符串集的正则表达式是什么。

答案 1 :(得分:1)

要匹配两个a,您会使用类似aa的内容吗? 现在我们知道+是1或更多的量词,*是0或更多的量词。因此,如果我们想重复整个模式,我们可以将它放在一个组中并重复整个模式:(aa)+

那将匹配:

  • aa
  • aaaa

但不是:

  • a(因为aa至少需要2个项目)`
  • aaa(因为aa会匹配前两个,但您会额外a

如果我们想要将奇数变为偶数,我们可以在组外添加一个额外的a,如下所示:a(aa)+。但是,由于我们想要一个没有特定最小值的奇数,我们不应该使用+,因为这将需要至少3 a

所以整个答案是:(bb|a(aa)*)

答案 2 :(得分:0)

听起来第一个问题是要求您为与提供的正则表达式不匹配的字符串集编写正则表达式。

例如,假设问题是要求aa+与{a}匹配的字符串集的正则表达式。好吧,这里有一些匹配的字符串:

  • 'AA'
  • 'AAAA'
  • 'AAAAA'

哪些字符串不匹配?这是唯一的两个:

  • ''
  • 'A'

后一组的正则表达式为a?

关于第二个问题,我建议打一些积极和消极的测试用例。通过你的正则表达式运行这样的字符串,看看会发生什么:

  • 'a'(应该通过)
  • 'aaa'(应该通过)
  • 'bb'(应该通过)
  • ''(应该失败)
  • 'aa'(应该失败)
  • 'aba'(应该失败)
祝你好运!

答案 3 :(得分:0)

表达式(a+b)*a(a+b)*只表示: 在字符串中是a。此表达式无法生成的唯一字符串是:b*

答案 4 :(得分:0)

此表达式表示RE必须在表达式中包含Atleast 1'A'。

这个表达式不接受

'B' 'B' * 要么 空集