Входные данные представляют собой строку, представляющую список элементов.
Список определяется как открытый вьющийся {
, за которым следуют 0 или более элементов, разделенных пробелом, за которым следует закрытый вьющийся }
.
Элемент является литералом или спискомэлементов.
Литерал - это последовательность непробельных символов.Если элемент содержит фигурную скобку, его необходимо экранировать обратной косой чертой: \{
и \}
.(Или вы могли бы предположить, что curly не разрешены внутри литералов, для простоты)
Пример:
"{abc { def ghi } 7 { 1 {2} {3 4} } {5 6} x\{yz \}foo }"
Нет curly внутри литералов:
"{abc { def ghi } 7 { 1 {2} {3 4} } {5 6} xyz foo }"
(Этоупрощенное определение списка Tcl.)
Что я хочу знать: можно ли разбить вход на элементы самого внешнего цикла с помощью регулярных выражений?
Ожидаемый результат:
abc
{ def ghi }
7
{ 1 {2} {3 4} }
{5 6}
x{yz
}foo
Реальный вопрос: можно ли это сделать с помощью регулярных выражений?
Меня больше всего интересует .NET-аромат, но я приму любые ответы.
Я опубликую свое собственное предположение в ответ и посмотрим, проверено ли оно или уничтожено.