Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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
为什么这个正则表达式在RegexBuddy中工作而在.NET中不工作_.net_Regex - Fatal编程技术网

为什么这个正则表达式在RegexBuddy中工作而在.NET中不工作

为什么这个正则表达式在RegexBuddy中工作而在.NET中不工作,.net,regex,.net,Regex,是否有以下原因不应在via.Net中工作,而应在RegexBuddy中工作 字符串: formatter:'number',formatoptions:{decimalSeparator:'.',decimalPlaces:2,defaulValue:0} 表达模式: [a-zA-Z]+:({)??([a-zA-Z]+[:](')??[a-zA-Z0-9.,]+(?(3)'|,?),?)+(?(1)}|.) 在regex buddy中生成匹配,但在.net中失败 private static

是否有以下原因不应在via.Net中工作,而应在RegexBuddy中工作

字符串:

formatter:'number',formatoptions:{decimalSeparator:'.',decimalPlaces:2,defaulValue:0}
表达模式:

[a-zA-Z]+:({)??([a-zA-Z]+[:](')??[a-zA-Z0-9.,]+(?(3)'|,?),?)+(?(1)}|.)
在regex buddy中生成匹配,但在.net中失败

private static List<string> GetObjectProps(this string str, out string strWithOutObjectProps)
{
    var lst = new List<String>();
    var temp = str;
    Regex RegexObj = new Regex("[a-zA-Z]+:({)??([a-zA-Z]+[:](')??[a-zA-Z0-9.,]+(?(3)'|,?),?)+(?(1)}|.)");
    Match MatchResults = RegexObj.Match(str);

    while(MatchResults.Success) //fails
    {
        lst.Add(MatchResults.Value);
        temp = MatchResults.Index > 0
                   ? temp.Substring(0, MatchResults.Index - 1) +
                     temp.Substring(MatchResults.Index + MatchResults.Length)
                   : temp.Substring(MatchResults.Index + MatchResults.Length);

        MatchResults = MatchResults.NextMatch();
    }

    strWithOutObjectProps = temp;
    return lst;
}

虽然这个表达式在a/c上并不完美,因为它必须使分隔符可选以避免后面的分隔符,但是有什么想法可以避免这个问题吗

我知道RegexBuddy模拟.NET Regex引擎。它实际上并不直接运行它。例如,这些限制包括一个。但您可能刚刚偶然发现了其他一些不兼容。你可能想了解它或者在他们的论坛上发布,这样他们就可以研究它了


作为测试,您还可以尝试直接从.NET正则表达式引擎运行的正则表达式。

经过一些调整后,这就是我想到的:

var reg = new Regex("\s+(?<name>[a-zA-Z]*)\s+:\s+(?<value>('.*')|(\".*\")|[^,}]*)");
var input = "{ decimalSeparator : \",\", decimalPlaces : 2, defaulValue : 0 }";
var matches = reg.Matches(input);
var name = matches[0].Groups["name"];
var value = matches[0].Groups["value"];
var reg=new Regex(“\s+(?[a-zA-Z]*)\s+:\s+(?('.'''.')|(\“*”)|[^,}]*)”;
var input=“{decimalSeparator:\”,\”,小数位数:2,defaulValue:0}”;
变量匹配=注册匹配(输入);
变量名称=匹配[0]。组[“名称”];
变量值=匹配[0]。组[“值”];

我对您想要的东西做了一些假设,所以如果他们错了,请告诉我。

您是否在RegexBuddy中选择了相同的正则表达式引擎?您在RegexBuddy中使用了什么语言?RegexBuddy屏幕左侧有一个下拉框,您可以在其中为不同的语言选择合适的regex,有JGsoft、.NET、Posix BRE、Posix ERE、Java、Perl、Python、Ruby等等,但也有少数人认为有人需要使用合适的JSON解析器等一下。。。这甚至不是有效的JSON。我建议你首先访问是的gumbo它完全一样,是否选择了c#,w.r.t JSON我知道JSON,它是有效的JSON?当然不是,这是一个稍后要整理的部分,感谢rob的编辑,确保它更具可读性
var reg = new Regex("\s+(?<name>[a-zA-Z]*)\s+:\s+(?<value>('.*')|(\".*\")|[^,}]*)");
var input = "{ decimalSeparator : \",\", decimalPlaces : 2, defaulValue : 0 }";
var matches = reg.Matches(input);
var name = matches[0].Groups["name"];
var value = matches[0].Groups["value"];