locked
Почему [вставьте сюда длинное, сложное регулярное выражение] не работает так, как ожидается? RRS feed

  • Общие обсуждения

  • В целом, при взгляде на сложное выражение довольно трудно определить, чему оно должно соответствовать. В таких случаях обычно используется метод проб и ошибок, чтобы определить, какая часть вызывает проблемы. Например, замените вторую часть выражения на .* и посмотрите, сработает ли оно.

    Если проблема решится, поместите назад некоторую часть выражения. Если нет, замените еще один фрагмент на .*. Рано или поздно местонахождение проблемы обнаружится. Такой же метод можно использовать для начала выражения или даже для легко изолируемых внутренних подвыражений.

    Также важно знать, чему именно соответствует выражение, а не просто подтвердить факт совпададения. Для этого используйте следующую часть кода для выдачи всех совпадений, групп и записей. Объем выводимых данных может быть довольно велик для сложных выражений, но это весьма полезно.

    [C#]

    public static void WriteGroups(Regex regex, Match match) {
      Console.WriteLine("Success: " + match.Success);
      Console.WriteLine("\r\nmatch.Value = \"" + match. Value + "\", Index = " + match.Index + ", Length = " + match.Length);
      Console.WriteLine("\r\nmatch.Groups.Count = " + match.Groups.Count);

      for ( int i=0; i < match.Groups.Count; i++ ) {
        string name = regex.GroupNameFromNumber(i);
        Console.WriteLine(" \r\n\tmatch.Groups[" + name + "].Value = \"" + match.Groups[i].Value + "\", Index = " + match.Groups[i].Index + ", Length = " + match.Groups[i].Length);
        Console. WriteLine("\tmatch.Groups[" + name + "].Captures.Count = " + match.Groups[i].Captures.Count);

        for ( int j=0; j ‹< match.Groups[ name].Captures.Count; j++ ) {
          Console.WriteLine("\t\tmatch.Groups[" + name + "].Captures[" + j + "].Value = \"" + match.Groups[i].Captures[j].Value + " \", Index = " + match.Groups[i].Captures[j].Index + ", Length = " + match.Groups[i].Captures[j].Length);
        }
      }
    }

    Для связи [Mail]
    • Перемещено Tagore Bandlamudi 3 октября 2010 г. 0:57 MSDN Forums consolidation (От:Форум по .NET Framework)
    18 февраля 2010 г. 12:39
    Модератор