0
L= { w is {1,2,3}* 
   | w starts with 3, ends with 2 and there is a substring of only 1 with length 
       even equal or >2}.

所以一些测试的结果必须是:

3323112: accepted
311211112: non accepted
31112: non accepted
32: non accepted
2113: non accepted
313212: non accepted

我的回答是:3*(11)*2*

但它没有通过一些测试......有人可以帮助我吗?

第二个练习是:

L= { w is {1,2}* 
   | in w after every 1 there is one or more 2, but if the 1 is the last 
     character it could be the last (no 2 after it)}

测试字符串:

1: accepted
222:  accepted
221212122:  accepted
1222121:  accepted
111221: not  accepted
11: not  accepted

我的解决方案是(12*)*

但它没有通过一些测试......请帮助我。

4

3 回答 3

1

我不会为你做作业,但我会指出你正在尝试做的一些问题:

  • 星号本身不是通配符。这并不意味着“匹配任何东西”。它是一个量词,用于修改前一个标记。您想使用.*而不是*允许任意数量的任意字符。
  • 该表达式.*(11)*.*还匹配具有奇数个 1 的字符串,因为.也可以是 1。紧接在 1 之前和之后的数字必须是“not-a-1”(即 2 或 3)。

希望这对您有所帮助。

于 2011-10-29T12:33:49.047 回答
1
  • 以 3 开头:^3
  • 以 2 结尾:2$
  • 包含至少两个 1 的序列:1{2,}
  • 生成的正则表达式:(^3[1-3]*1{2,}[1-3]*2$这些[1-3]*部分允许其中的任何数字 1 到 3,因为那里没有要求)
  • 编辑:我想我误解了关于 1s 的条件,
    所以模式是:((?<!1)(1{2})+(?!1)向后和向前看以确保 1s 被隔离)
  • 修改后的图案:^3[1-3]*(?<!1)(1{2})+(?!1)[1-3]*2$

  • 每个 1 之后至少有一个 2:((?<!1)12+确保在此之前没有 1)
  • 最后的 1 可能没有 2 之后:1?$
  • 结果:^((?<!1)12+)*1?$

希望这可以帮助。祝你好运,正则表达式很难学习,但一旦你掌握了它就会很容易。

于 2011-10-29T12:37:54.803 回答
1

由于这似乎是家庭作业,我不会给出直接的答案。您需要查看正则表达式中的修饰符。*表示重复0次或多次。字符类还有+,?和方括号。另请注意,某些可用的内容可能取决于您正在使用的正则表达式解析器(通常称为“风味”)。但有些基础通常是相同的。

祝你好运!

于 2011-10-29T12:38:34.943 回答