正则表达式获取匹配列表

时间:2013-01-23 11:19:53

标签: .net regex pattern-matching

我有这个:

string input = @"(+order: top* OR +order: first* OR +order: second* OR +order: third* OR +order: ""fourth top"" OR +order: fifth*)";

我需要获得一个正则表达式,从上面提取如下:

  

“top,first,second,third,4th top,5th”

我做了这个

    public static string GetOrders(string input)
    {
        string pattern = @"order(.*)OR";

        List<string> orders = new List<string>();
        foreach (Match m in Regex.Matches(input, pattern))
            orders.Add(m.Value);

        return string.Join(", ", orders.ToArray());
    }

我的正则表达式模式不完整。我以为我可以在“+ order:”和“OR”之间提取所有内容,但它不起作用。它似乎没有迭代元素,我只是得到整个输入字符串。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

.*贪婪,从第一个order到最后一个OR匹配。

@"order(.*?)OR"只能用于前四场比赛;第五个跟不是OR

所以一个更好的正则表达式

@"order:\s*(.*?)\s*(?:OR|\))"

更好(假设规则是“参数不包含空格并以*结尾,或者它包含空格并包含在" s”中:

@"(?<=order:\s*)(?:""[^""]*""|[^""*\s]*)"