我不知道如何在C#中做到這一點,但理論上是的,它可以做到。
您需要將您的正則表達式轉換爲NFA或DFA圖形,橫向使用BFS跟蹤當前路徑,爲每條邊添加一個新字符,並在完成節點時打印當前路徑被擊中。根據手頭的正則表達式,您的內存使用情況可以輕鬆呈指數增長。
例如,給定的正則表達式(a|b)*abb
我們可以創建一個NFA圖表如下所示:

這NFA圖形既可以採用識別一個單詞,枚舉所有可能的單詞。我們通過非確定性遍歷圖來做到這一點。意思是,我們需要跟蹤圖表中所有可能的路徑。
從零開始,我們做一個BFS,並且對於每個有兩個或更多輸出邊的節點,我們創建一個新的非確定性路徑。所述BFS訪問該節點按照下面的順序,每次打印:
0, 1, 7, 2, 4, 8, 3, 5, 9, 6, 6, 10, 1, 1, 7, ...
對於每個節點訪問我們有中間臨時路徑爲:
- 0 「」
- 1中,「E 「
- 7, 」E「
- 2, 」EE「
- 4, 」EE「
- 8,」 E一個」
- 3, 「EEA」
- 5中, 「EEB」
- 9中, 「EAB」
- 6中, 「eeae」
- 6中, 「eebe」
- 10 「eabb」
- 1 「eeaee」
- 1 「eebee」
在 「E」 符號是表示空字符串0123的ε-信,應在打印每個單詞時將其過濾掉。
通過在圖上做一個BFS,我們將每個單詞按照需要用NFA識別單詞的邊的數量進行排序。由於圖形包含一個循環,因此該過程永遠不會結束。
每一次每一個不確定的路徑到達我們打印生成的字符串結束節點10:
來源
2015-01-27 10:17:38
vz0
尋找解決[停止問題](http://en.wikipedia.org/wiki/Halting_problem)? – Oded 2012-03-02 15:09:11
正則表達式不完整。編輯:一般的正則表達式並不完整。如果C#允許你編寫完整的圖靈,那麼是的,這是一個問題,這些功能將不得不被禁止。 – zmccord 2012-03-02 15:16:00
哦,我看到這也是一個部分愚弄http://stackoverflow.com/questions/4208733/generative-regular-expressionions – zmccord 2012-03-02 15:19:52