У меня есть такой текст:
UseProp1?(Prop1?Prop1:Test):(UseProp2?Prop2:(Test Text: '{TextProperty}' Test Reference:{Reference}))
Я пытаюсь использовать регулярное выражение в c # для извлечения вложенных сегментов if / else.
Чтобы найти '?'Я использовал:
Шаблон 1: \?\s*(?![^()]*\))
и для поиска ':' Я использовал:
Шаблон 2: \:\s*(?![^()]*\))
Это прекрасно работает, когда есть один уровень скобок, но не при их вложении.
Я использовал этот онлайн-инструмент для упрощения тестирования: http://regexstorm.net/tester (и вставьте шаблон-1 и введитесверху)
Как видите, он выделяет два матча, но я хочу только первый.Вы также заметите, что первые круглые скобки пропущены, но не следующие со вложенными уровнями
Я ожидаю, что список совпадений будет:
1) UseProp1
2)(Prop1? Prop1: Test) :( UseProp2? Prop2: (Test Text: '{TextProperty}' Ссылка на тест: {Reference}))
То, что я получаю сейчас:
1) UseProp1
2) (Prop1? Prop1: Test) :( UseProp2
3) Prop2: (Test Text: '{TextProperty}' Ссылка на тест: {Reference}))