日期:2014-05-17  浏览次数:20290 次

帮忙修正一下正则的小错误
字符串如下:
.
ST___pid-0&sid-0&innername-title&format-text___ST
ST___pid-0&sid-2&innername-C__1_t&format-text___ST
ST___pid-0&sid-44&innername-C__1_mc&format-checkboxlist___ST
ST___pid-0&sid-44&innername-C__1_mc&format-checkboxlist___ST
.
.
.

现在有错误的正则如下:
        var list = Regex.Matches(str, @"(?is)ST___(?=[^>]*?pid-([""'])(?<pid>[^""']+)\1)(?=[^>]*?sid-([""'])(?<sid>[^""']+)\2(?=[^>]*?innername-([""'])(?<innername>[^""']+)\3(?=[^>]*?format-([""'])(?<format>[^""']+)\4)[^>]*>").OfType<Match>().Select(t => new { pid = t.Groups["pid"].Value, sid = t.Groups["sid"].Value, innername = t.Groups["innername"].Value, format = t.Groups["format"].Value }).ToList();

要实现的功能,就是 
把上列字符串中所有以ST___开头和___ST结尾里的(pid,sid,innername,format,这里后面不是等号是-号相当于等号的作用)的属性放到list中,并且把list对象的所有值遍历显示出来

------解决方案--------------------
            var list = Regex.Matches(str, @"(?is)ST_+(?=[^>]*?pid\-(?<pid>[^&_]+))(?=[^>]*?sid\-(?<sid>[^&_]+))(?=[^>]*?innername\-(?<innername>[^&_]+))(?=[^>]*?format\-(?<format>[^&_]+)).*?_+ST").OfType<Match>().Select(t => new { pid = t.Groups["pid"].Value, sid = t.Groups["sid"].Value, innername = t.Groups["innername"].Value, format = t.Groups["format"].Value }).ToList();

------解决方案--------------------
学习了一下正则,这样也可以的:
var list2 = Regex.Matches(str, @"(?is)ST___pid\-(?<pid>[\w-&_]*)&sid\-(?<sid>[\w-&_]*)&innername\-(?<innername>[\w-&_]*)&format\-(?<format>[\w-&_]*)___ST").OfType<Match>().Select(t => new { pid = t.Groups["pid"].Value, sid = t.Groups["sid"].Value, innername = t.Groups["innername"].Value, format = t.Groups["format"].Value }).ToList();