我有那种 URL:
/domain.com/segment1/segment2/segment3/segment4/segment5/segment6/segment7/filename.ext
有时
http://someother.com/segment1/segment2/segment3/segment4/segment5/segment6/segment7/filename.ext
我需要专门使用 C# 和 Regex 提取第 6 段。正则表达式是绝对必要的,因为我将来可能想通过更改一些配置来提取段 3。
请您参考如下方法:
尽管您最好选择与 URL 相关的类来解析 URL,如另一个答案中所述,因为内置函数已被证明并经过良好测试,甚至可以处理极端情况,但正如您提到的,您有一些限制,只能使用正则表达式解决方案,您可以尝试以下解决方案。
使用这个正则表达式可以很容易地找到第六个或第 N 个片段,
(?:([^/]+)/){7}
它捕获 6+1(N+1 通常用于第 N 个段,其中 +1 用于匹配 URL 的域部分)段并且该组保留最后捕获的值,可以使用 group1 访问该值。
此处,([^/]+) 匹配一个或多个除/ 之外的任何字符,并捕获group1 中紧跟/ 的内容> 并且整个匹配恰好 7 次。
var pattern = "(?:([^/]+)/){7}";
var match = Regex.Match("/domain.com/segment1/segment2/segment3/segment4/segment5/segment6/segment7/filename.ext", pattern);
Console.WriteLine("Segment: " + match.Groups[1].Value);
match = Regex.Match("http://someother.com/segment1/segment2/segment3/segment4/segment5/segment6/segment7/filename.ext", pattern);
Console.WriteLine("Segment: " + match.Groups[1].Value);
打印第六段的值,
Segment: segment6
Segment: segment6
