2013-07-21 43 views
1

讓我解釋我面臨的實際問題。使用正則表達式解析錯誤

當我的SearchString在爲C +,正則表達式的設置以下的罰款。 然而,當我搜索字符串是C++,它引發了我的錯誤,說明 -

parsing "C++" - Nested quantifier +. 

任何人都可以讓我知道如何讓過去這個錯誤?

RegExp = new Regex(Search_Str.Replace(" ", "|").Trim(), RegexOptions.IgnoreCase); 
+0

那麼,你沒有發佈正則表達式:) – usr

回答

3

首先,我相信你會通過尋找一些正則表達式的教程,而不是在這裏問你目前階段學習更多。

要回答你的問題,我想指出的是,+是在正則表達式量詞,並指前一個字符1次或多次(或組),使C+將匹配至少1 C,這意味着C會匹配,CC將匹配,CCC將匹配等。您在C+的搜索實際上只匹配C

在正則表達式C++會給你一個錯誤,至少在C#。您不會與其他正則表達式風格,包括JGsoft,Java和PCRE(++possessive quantifier在那些口味)。

那麼,該怎麼辦?您需要轉義+字符,以便您的搜索將查找文字+字符。一個簡單的方法是在+\+之前添加反斜槓。另一種方法是將+置於方括號內。

這就是說,你可以使用:

C\+\+ 

或者......

C[+][+] 

爲了尋找C++。現在,既然你有兩次相同的字符,你可以使用{n}(其中n是出現的次數)來表示的最後一個字符出現的次數,自何處:

C\+{2} 

或者......

C[+]{2} 

應該給出相同的結果。

+0

謝謝傑裏的詳細解釋。這有助於解決我的問題。 – Robert

+0

@ user2604371不客氣:) – Jerry

3

+是正則表達式中的一個特殊符號。你必須逃避它。所有的

Regex regex = new Regex(@"C+\+"); 
+0

感謝您的回覆@Ghost。但是,你能讓我知道如何克服這個錯誤嗎?它如何讓C +通過而不是C++? – Robert

+0

@ user2604371'C +'表示一個或多個'C'字符(如'CCCC')。 –

+0

謝謝@CamiloMartin。這有幫助。 – Robert

0

我忍不住通知@鬼的答案是錯的。

這個片段是錯誤的:

Regex regex = new Regex(@"C+\+"); 

因爲第一+沒有逃脫。所以意思仍然是「一個或多個C個字符,後跟一個加號」。正確的形式是@"C\+\+"