2016-06-11 541 views
0

我正在尝试将前缀检索到一个URL。该URL可能看起来像下列之一:正则表达式匹配URL前缀

  1. “/索引”
  2. “/首页/”
  3. “?/索引VAR1 =值”

我希望能够从中提取“索引”一词。我参加了一个刺它,但不能完全得到它:

public string GetPrefix(string URL) 
     { 
      Regex regex = new Regex("^/(.*?)[\\?/]*"); 
      var matches = regex.Match(URL); 
      return matches.Groups[1].ToString(); 
     } 
+0

试试这个 字符串模式=“指数”; 正则表达式rx = new Regex(pattern,RegexOptions.None); MatchCollection mc = rx.Matches(Your_Url); –

+0

已在下面回答的问题。你的方法只匹配文字索引。这在前缀不是索引的情况下不起作用。 – TheBear

+1

使用'System.Uri'类检索有关URL的信息。 –

回答

2

尝试:

^/([^/?])+ 

它的匹配,这不是一个/?一个/和任何字符n次。该匹配还将在捕获组$1中存储检索到的前缀。

+1

这失败了第3点。我简直就是想要所有3种情况下的“索引”。你的答案会输出“Index?var1 = value1”,因为我希望它只输出“Index”。 – TheBear

+0

没错。我更新了答案。 –

1
^/(?<action>[^/?#]+) 

你必须照顾所有3“/”,“?”和 “#”

  1. “/” 给出了一个子动作
  2. “?”给出的参数
  3. “#”给出页面标签

此外,您还可以命名捕获组更好的诠释。

public string GetPrefix(string url) 
{ 
    Regex regex = new Regex(@"^/(?<action>[^/?#]+)"); 
    var match = regex.Match(url); 
    return match.Groups["action"].Value; 
} 
0

您可以利用从这里System.Web命名空间System.Uri。即使你可能有相对URL,这应该工作:

using System.Web; 
... 
var URL = "/Index?var1=value1"; 
var uri = new Uri(new Uri("http://example.com"), URL); // Init the URI instance 
Console.WriteLine(uri.Segments.LastOrDefault().Trim('/'));  // Get the last segment trimming any slashes 

IDEONE demo