2011-07-24 77 views
2

我有一个小问题RE theory正则表达式理论

给定一个字母表{0,1},我必须创建一个不包含所有子字符串匹配一个正则表达式111

我不能获得分数,也为simplier子像00

编辑:该解决方案必须包含只有三个标准操作:级联,交替,克莱尼明星,你可以在wiki链接

谢谢你看。

回答

2

据我所知,你想要regexify的语言不允许包含三个或更多连续的1。这样的正则表达式可能是(110|10|0*)*|1|11|0*1|0*11

+0

也许(我忘了,不好意思),我认为我们需要为您的RE添加一些特殊情况,如1 11 001 011 010 ...对不对? – Antonio

+0

是的,这些字符串并不是我的主张。 – phimuemue

+1

'(| 1 | 11)(0(| 1 | 11))*' – Qtax

0

回到当时我们没有?!负向预测设施我会使用否定匹配。所以对于grep我会

grep -v (pattern I'm searching for) someFile.txt 

这将给文件中不包含模式的行。

在Perl中我会使用

!~ 

否定匹配,而不是通常

=~ 

这正则表达式的变体使用的是我不知道,但我挣扎看解决你的问题,而不是全面否定或?负向预测。

匹配器。

+0

谢谢你很多关于你的回答,请阅读我的编辑部分在我的岗位 – Antonio

1

如何:

{ε|1}{ε|1}{ε|{0{ε|1}{ε|1}}*} 
+0

令人印象深刻。我认为这是我需要的。尝试在http://www.oursland.net/projects/regexp/,它似乎工作得很好。 – Antonio

+0

花了我一段时间才意识到这等于'1?1?(01?1?)*',或者使用了不同的语法'1 {0,2}(01 {0,2})*'。 +1 – user123444555621

+0

由于这些正则表达式并不使用诸如^和$等开头和结尾的锚,为什么它们不匹配任何带有任意尾的字符串10110010111111111,正则表达式匹配第一位,我们不想要的111会是忽视 - 至少这就是perl家庭的工作方式。 – djna