fork download
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text.RegularExpressions;
  6.  
  7. public class Test
  8. {
  9. public static void Main()
  10. {
  11. var s = "(a * (x - y)) * c";
  12. var result = Regex.Matches(s, @"(?x)
  13. \( # открывающая круглая скобка
  14. (?> # начало группы, которая находит...
  15. [^()]+| # 1+ символов, отличных от круглых скобок
  16. (?<o>)\(| # открывающая круглая скобка (пустая строка добавляется в стек группы `o`)
  17. (?<-o>)\) # закрывающая круглая скобка (пустая строка удаляется из стека группы `o`)
  18. )* # повторить 0 и более раз
  19. (?(o)(?!)) # если в стеке группы `o` остались значения, отменить совпадение
  20. \) # закрывающая круглая скобка
  21. | # или
  22. [^\s()]+ # 1+ символов, отличных от пробельных и круглых скобок
  23. ")
  24. .Cast<Match>()
  25. .Select(m => m.Value)
  26. .ToArray();
  27.  
  28. foreach (var x in result)
  29. Console.WriteLine(x);
  30. }
  31. }
Success #stdin #stdout 0.08s 20840KB
stdin
Standard input is empty
stdout
(a * (x - y))
*
c