2011-10-10 132 views
1

我需要用下面的字符串分割的表達式:遞歸匹配的正則表達式

'with', 'select', 'from', 'where' 

這些會在序列中爲我寫的。你可以假定每個單詞都以字界開始和結束。

我已經做了這個沒有任何問題。但是,新的要求已經到來。 from子句可能包含整個表達式。

這意味着,所述表達可以是這樣的:

with 
    something 
select 
    something more 
from 
    with 
     aaaa 
    select 
     bbbb  
    from 
     [may be another expression] 
    where 
     the inner expression ends here 
where 
    the outer expression ends here 

我不需要分裂內表達。

現在的問題是,有沒有一種標準的方式來做這樣的事情?或者我需要手動完成自己的工作?

我不確定它是否重要,我的應用程序是C#之一。

+0

數據總是以相同的方式構造,或者可以用/ select/from/where以不同的順序嗎? –

+0

@ChrisThompson總是相同的順序。 – Mohayemin

+0

再次在這裏你可以使用http://VeParser.codeplex.com,因爲我在回答你的另一個問題時解釋MDX – 000

回答

3

看起來您的用例開始變得非常複雜,您可能最好花費時間和重構工作量來使用實際的解析實用程序,而不是正則表達式。我不是C#程序員,所以我不能幫你提供很多建議,但是搜索「C#解析器庫」產生了幾個看起來很有希望的鏈接。

如果你只需要一個固定的嵌套層次,那麼我認爲它在技術上可以用正則表達式來完成,但它會變得討厭。可能最簡單的方法是爲每個固定的嵌套層次編寫一個表達式,並從頂部開始匹配它們,直到獲得一個命中。醜,但可以工作。

如果頂級表達式中可以包含的嵌套表達式的數量沒有限制,那麼正則表達式不夠強大,無法正確執行此操作,您需要查看解析實用程序。我不會試圖自己寫一個解析器;幾乎可以肯定有可用的庫可以解決大多數棘手的問題。

+0

謝謝。儘管嵌套到2或3層以上的可能性非常小,但並不確定。另外,我真的不喜歡NASTY正則表達式(我現在擁有的那個已經是一個討厭的)。我想我應該去找一個解析器。我會讓你知道,如果我找到適合我的要求的東西:) – Mohayemin

+0

@Mohaimin也許回來並編輯你的問題,你最終發現,幫助任何人在這個問題上? – Ben

+0

當然。我還沒有找到任何東西。我會盡快找到答案。我在尋找。 – Mohayemin