2011-07-24 82 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