2016-06-11 2 views
0

URLへの接頭辞を取得しようとしています。私はできるようにしたいURL接頭辞に一致する正規表現

  1. "/インデックス"
  2. "/インデックス/"
  3. "/インデックスVAR1 = VALUE1?"

:URLは、次のいずれかのように見えるかもしれそこから単語「索引」を抽出することができます。私はそれで刺しを取ったが、非常にそれを得ることができませんでした:

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

この 文字列パターン=「インデックス」を試してみてくださいを参照してください。 正規表現rx =新しい正規表現(パターン、RegexOptions.None); MatchCollection mc = rx.Matches(Your_Url); –

+0

質問は既に下記に回答しています。あなたのメソッドは、リテラルワードのIndexにのみ一致します。プレフィックスがインデックスでない場合、これは機能しません。 – 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

関連する問題