Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取未知数量的正则表达式元素_C#_Regex_C# 4.0 - Fatal编程技术网

C# 获取未知数量的正则表达式元素

C# 获取未知数量的正则表达式元素,c#,regex,c#-4.0,C#,Regex,C# 4.0,我有一个字符串,它可能有几个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,但我不知道如何获取

我有一个字符串,它可能有几个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";
常量字符串machineinfo=@“machineinfo=”(?[^']+);
常量字符串userinfo=@“userinfo=”(?[^']+);
字符串machineName=display.Contains(“MachineInfo”)?
Regex.Matches(display,machineinfo)[0]。组[1]。值:“ANY”;
字符串userName=display.Contains(“UserInfo”)?
Regex.Matches(display,userinfo)[0]。组[1]。值:“ANY”;

在不知道显示字符串中可能包含的and和OR的数量的情况下,如何获取所有机器信息和用户信息???

您的语法似乎包括用括号嵌套。我建议您不要使用正则表达式来解析它,而是研究如何使用合适的解析器。正则表达式无法真正表达这种嵌套性。

这是一个效率低下/不完整的解决方案,请尝试改进结果

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

在上面的代码中,object
aaa
将为您提供
MachineInfo
。也可以尝试与
UserInfo
类似的功能,并将
操作符放在foreach循环中,试试您的技能。

您知道哪一个吗?我猜是ANTLR,但我不太了解它,无法推荐它。请稍等片刻,看看还会出现什么。parboiled似乎适用于Java,我在使用C#我不太喜欢使用外部工具的选项,我更喜欢用编程的方式来实现它。@Manolete:你为什么这么认为?