意外的正则表达式组
本文关键字:正则表达式 意外 | 更新日期: 2023-09-27 18:17:24
我想使用正则表达式来分析url,但是我无法得到我所期望的正则表达式组。正则表达式是:
@"member/filter(.*)(/.+)*"
匹配字符串:
- "成员/过滤大家"
- "会员/filter-two/选项"
- "会员/filter-three/选项/选项"
我希望得到以下组:
- 成员/过滤大家/过滤大家
- member/filter-two/option,/filter-two,/option
- member/filter-three/option/option,/filter-three,/option(with 2 capture)
我得到第一个字符串的结果,但在其他两个字符串之前,我得到:
- member/filter-two/option,/filter-two/option,空字符串
- member/filter-three/option/option,/filter-three/option/option,空字符串
有什么问题吗?
Try
@"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();
在这里,首先从字符串中删除常量部分(它可以是函数的参数)。然后您只需检查两个/
字符内的所有内容。您可以通过将[^/]
标识为您想要匹配的字符来实现这一点,这意味着匹配一个字符,而不是/
,然后在其后面放置标识符(+号),这意味着匹配多个字符。
"member/filter([^/]*)(/.+)*"似乎合乎逻辑,但不切实际,因为它接受空选项(即member/filter1/////////)。另一种更准确实用的模式是member(/filter[^/]+(/[^/]+)*)*