2011-11-21 110 views
0

有沒有辦法查看一個字符串是否可以用幾個字符擴展來匹配某些給定的正則表達式?我可以使用Regex類嗎?我GOOGLE了一段時間,似乎我應該寫我自己的正則表達式解析器...正則表達式部分匹配

像亞歷克斯說:如果模式爲abc字符串ab將符合我的標準和串defbc止跌」噸。我希望這適用於編譯時未知的任何正則表達式。

+7

你能發表一個你想要完成的例子嗎? –

+0

你有沒有想要實現的例子? –

+0

我認爲所要求的是查看需要什麼字符來獲得比賽。例如。 「abc」是模式,「ab」被提供。所述函數的結果是「c」。但是,該模式必須非常明確,才能做到這一點。 – Alex

回答

1

正則表達式被編譯成決策樹,允許決定在O(n)時間內輸入長度爲n的匹配。您的自定義RE解析器可以簡單地計數直到失敗的決策數量,當與匹配所需的步驟數相比較時,它將指示參數對RE的「親密度」。假設你使用的是相當簡單的RE,並且「擴展」意味着在字符串的末尾添加字符,這在計算上是可行的。

+0

這就是我將首先嚐試做的,謝謝 – Natalia

+0

但是,如何訪問決策樹?我不知道你可以這樣做。 – neontapir

+0

如果我們可以從例如C#的Match對象獲取這些信息,這將是一個更容易的問題。我假設創建自定義分析器涉及到生成自己的決策樹/ DFA。有關更多信息,請參閱http://en.wikipedia.org/wiki/Regular_expression#Implementations_and_running_times。 – paislee

0

我相信你需要編寫你自己的Regex解析器。它需要能夠採取任意的正則表達式並將其分解爲元素。例如,它需要採取/abc/並返回{ /abc/, /ab/, /a/ }並檢查輸入是否與其中的任何匹配。

雖然對於像/abc/這樣的簡單表達式來說這可能並不算太壞,但對於更復雜的表達式,如(?<=s)t,它們將變得更加繁重,這些表達式看起來很倒黴。

+0

謝謝你的答案,對於非常簡單的正則表達式,這種方法足夠好了 – Natalia