2016-06-11 539 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