我想使用正则表达式来分析网址,但我不能像我期望的那样获得正则表达式组。 我的正则表达式是:
@"member/filter(.*)(/.+)*"
要匹配的字符串:
我希望得到以下群组:
我得到了第一个字符串的结果,但是我得到了另外两个字符串:
可能是什么问题?
答案 0 :(得分:2)
尝试
@"member/filter([^/]*)(/.+)*"
另一种方法是以这种方式使用MatchCollection
:
string url = "member/filter-three/option/option";
url = url.Replace("member/filter-", string.Empty); // cutting static content
MatchCollection matches = new Regex(@"([^/]+)/?").Matches(url);
foreach (Match match in matches)
{
Console.WriteLine(match.Groups[1].Value);
}
Console.ReadLine();
在这里,首先从字符串中删除常量部分(它可以是函数的参数)。然后,您只需检查两个/
字符内的所有内容。您可以将[^/]
标识为要匹配的字符,即匹配一个字符,而不是/
,然后在其后添加标识符(+符号) ),表示匹配多个字符。
答案 1 :(得分:0)
“member / filter([^ /] *)(/。+)*”似乎是合乎逻辑的,但由于它接受空选项(即member / filter1 /////////),因此不切实际。一个更准确实用的模式,也允许您接受多个带选项的过滤器成员(/ filter [^ /] +(/ [^ /] +)*)*