2011-12-14 96 views
-1

我有可能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"; 

我能做些什么来让所有的M​​achineInfos和UserInfos不知道我可以在显示字符串AND和OR的数目? ?

回答

1

它看起来像你的语法包括与括号嵌套。我建议你不要使用正则表达式来解析这个问题,而是使用正确的解析器进行研究。正则表达式不能真正表达这种嵌套。

+0

你知道哪一个? – Manolete 2011-12-14 13:04:37

+0

我想ANTLR,但我不知道推荐它。在那里挂一段时间,看看还有什么弹出。 – 2011-12-14 13:16:19

-1

这里是一个低效/不完整的解决方案,尝试自己来改善结果

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

在上面的代码,对象aaa会给你MachineInfoUserInfo也..try相似,并把?操作foreach循环内并尝试你的技能..