Получение неизвестного количества элементов регулярного выражения - PullRequest
0 голосов
/ 14 декабря 2011

У меня есть строка, которая может иметь несколько комбинаций AND и OR следующим образом:

   string display = "every ((Id2=Event(MachineInfo='M3',UserInfo='U3')) or (Id1=Event(MachineInfo='M2',UserInfo='U2')) and (Id0=Event(MachineInfo='M1',UserInfo='U1')))"

Сейчас у меня есть неэффективный способ поймать только первые MachineInfo и UserInfo, но я не знаю, какчтобы получить остальные элементы строки:

 const string machineinfo = @"MachineInfo='(?<MachineInfo>[^']+)";
 const string userinfo = @"UserInfo='(?<UserInfo>[^']+)";

 string machineName = display.Contains("MachineInfo") ?
             Regex.Matches(display, machineinfo)[0].Groups[1].Value : "ANY";
 string userName = display.Contains("UserInfo") ?
             Regex.Matches(display, userinfo)[0].Groups[1].Value : "ANY";

Что я могу сделать, чтобы получить все MachineInfos и UserInfos, не зная количества AND и OR, которые я могу иметь в отображаемой строке ??

Ответы [ 2 ]

1 голос
/ 14 декабря 2011

Похоже, ваш синтаксис включает в себя вложение с круглыми скобками. Я предлагаю вам не использовать регулярные выражения для анализа этого, но вместо этого посмотрите на использование правильного синтаксического анализатора. Регулярные выражения не могут действительно выразить эту вложенность.

0 голосов
/ 14 декабря 2011

Вот неэффективное / неполное решение, попробуйте улучшить результат

        MatchCollection aa = Regex.Matches(display, machineinfo);
        foreach (var aaa in aa) {
            //aaa.ToString() 
            //try some thing with object aaa
        }

в приведенном выше коде объект aaa даст вам MachineInfo .. попробуйте аналогично с UserInfo также и поместите оператор ? в цикл foreach и попробуйте свои навыки ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...