2012-03-13 3 views
-2

Я недавно наткнулся на эту проблему во время тестирования моей программы на C#.C# 'parsing ")" - Too Many)' s Issue

разбора ")" - слишком много) 's

Вот мой код:

 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 ')'. (И отменили во втором выражении «если»): я предполагаю, что они оба вызывают мою проблему; однако, я не знаю, как это исправить.

Справка была бы принята с благодарностью.

+1

Посмотрите на выходе, найти ошибку форматирования. –

+3

Возможный дубликат [разбора "\ (|. *?) |)" - слишком много) 's] (http://stackoverflow.com/questions/6420758/parsing-too-many-s) – Joe

+0

Действительно ли LuaLibrary скобки в виде парантесов? Практика немного сухая может помочь. – Tod

ответ

3

Строка в вашем вызове SetStyle является шаблоном регулярного выражения, поэтому необходимо удалить экрану ). Проблема в том, что parens являются специальными символами в Regex. Анализатор регулярных выражений видит закрывающий парик, но не может открыть паз, чтобы соответствовать ему.

Попробуйте это:

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

Я действительно сделал это. Проблема говорит о сохранности. Операторы if не будут работать, если «Содержит» имеет что-то вроде, например: «^ [a-zA-Z] + $». –

+0

Какого типа объект 'e'? –

+0

@TommyCooper - вы не хотите, чтобы '' '' '' '' '' '' '' '' в регулярном выражении, чтобы проверить наличие подстроки –