2012-03-13 71 views
-2

我最近在測試C#程序時偶然發現了這個問題。C#'parsing「)」 - 太多)的問題

解析 「)」 - 太多)的

這裏是我的代碼:

 try 
     { 
      if (e.ChangedRange.Text.Contains(";") && Convert.ToBoolean(e.ChangedRange.Text.IndexOf(")", 1))) 
      { 
       if (!e.ChangedRange.Text.Contains(";") && !Convert.ToBoolean(e.ChangedRange.Text.IndexOf(")", 1))) 
        LuaLibrary.isParenthesesSemiColonError = false; 
       else 
       { 
        LuaLibrary.isParenthesesSemiColonError = true; 
        e.ChangedRange.SetStyle(error_red, ");", RegexOptions.IgnoreCase); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

什麼我做在這裏,我檢查,看看是否當前行(e.ChangedRange.Text)包含';'與IndexOf a')'。 (並在第二個'if'聲明中顛倒過來):我假設他們都是我的問題;但是,我不知道如何解決這個問題。

幫助將不勝感激。

+1

查看輸出,找到格式錯誤。 – 2012-03-13 00:37:52

+3

[解析「\(|。*?)|)」的可能的重複「 - 太多了)'](http://stackoverflow.com/questions/6420758/parsing-too-many-s) – Joe 2012-03-13 00:40:08

+0

LuaLibrary確實真的拼寫括號作爲paraentheses?練習一點DRY可能會有所幫助。 – Tod 2012-03-13 00:48:33

回答

3

您撥打SetStyle的字符串是一個正則表達式模式,因此需要轉義)。問題是,parens是Regex中的特殊字符。正則表達式解析器正在看到關閉的paren,但沒有與之匹配的開放paren。

試試這個:

e.ChangedRange.SetStyle(error_red, @"\);", RegexOptions.IgnoreCase); 
+0

我其實是這樣做的。問題仍然存在。當「Contains」中有例如:「^ [a-zA-Z] + $」時,if語句將不起作用。 – 2012-03-13 00:56:47

+0

「e」是什麼類型的對象? – 2012-03-13 01:13:47

+0

@TommyCooper - 你不想在正則表達式中使用'^'和'$'來測試子字符串的存在 – 2012-03-13 01:15:44