0

私は正規表現が苦手で、適切な解決策を見つけることができないので、かなりの量の検索を行った後でも、これを特定することはできません。

オプションのpage=123パラメータを持つURLがあります。URLには、ページパラメータの前または後に発生する可能性のある他のオプションのgetパラメータも存在する可能性があります。

ページング関数で使用できるようにするには、そのパラメーターをpage=-PLACEHOLDER--に置き換える必要があります。

ページパラメータがURLに含まれていない場合は、前述の方法で追加したいと思います。

このためにonstringの拡張メソッドを作成しようとしていますが、静的関数も同様に優れています。

少し説明していただければ幸いです。正規表現の良いレッスンが得られ、次回は質問する必要がないことを願っています。

また、私はasp.net mvc-3を使用していますが、互換性の理由から、mvc-sルーティングの前に複雑な書き換えが発生し、それにアクセスできません。ですから、私はできないので、これにmvc-sルーティングを使用するようにアドバイスしないでください。

4

2 に答える 2

5

正規表現をスキップして、別のアプローチを使用することをお勧めします。

  1. URLからクエリ文字列を抽出します。
  2. HttpValueCollectionを使用してクエリ文字列からを構築しますHttpUtility.ParseQueryString
  3. コレクション内のページパラメータを置き換えます。
  4. コレクションを呼び出す.ToString()と、新しいクエリ文字列が返されます。
  5. 元のクエリ文字列から古いクエリ文字列と新しいクエリ文字列を差し引いたものを使用して、変更されたURLを作成します。

何かのようなもの:

public static string SetPageParameter(this string url, int pageNumber)
{
    var queryStartIndex = url.IndexOf("?") + 1;
    if (queryStartIndex == 0)
    {
        return string.Format("{0}?page={1}", url, pageNumber);
    }
    var oldQueryString = url.Substring(queryStartIndex);
    var queryParameters = HttpUtility.ParseQueryString(oldQueryString);
    queryParameters["page"] = pageNumber;
    return url.Substring(0, queryStartIndex) + queryParameters.ToString();
}

これがコンパイルされることを確認していませんが、それはあなたにアイデアを与えるはずです。

于 2011-05-04T09:31:41.383 に答える
0

正規表現を使用した静的メソッドとして必要です。最初の状態は次のとおりです。

public static string ChangePage(string sUrl)
{
  string sRc = string.Empty;
  const string sToReplace = "&page=--PLACEHOLDER--";

  Regex regURL = new Regex(@"^http://.*(&?page=(\d+)).*$");

  Match mPage =  regURL.Match(sUrl);
  if (mPage.Success) {
    GroupCollection gc = mPage.Groups;
    string sCapture = gc[1].Captures[0].Value;
    // gc[2].Captures[0].Value) is the page number
    sRc = sUrl.Replace(sCapture, sToReplace);
  }
  else {
    sRc = sUrl+sToReplace;
  }

  return sRc;
}

小さなテストで:

static void Main(string[] args)
{
  string sUrl1 = "http://localhost:22666/HtmlEdit.aspx?mid=0&page=123&test=12";
  string sUrl2 = "http://localhost:22666/HtmlEdit.aspx?mid=0&page=125612";
  string sUrl3 = "http://localhost:22666/HtmlEdit.aspx?mid=0&pager=12";
  string sUrl4 = "http://localhost:22666/HtmlEdit.aspx?page=12&mid=0";

  string sRc = string.Empty;
  sRc = ChangePage(sUrl1);
  Console.WriteLine(sRc);
  sRc = ChangePage(sUrl2);
  Console.WriteLine(sRc);
  sRc = ChangePage(sUrl3);
  Console.WriteLine(sRc);
  sRc = ChangePage(sUrl4);
  Console.WriteLine(sRc);
}

結果が得られます:

http://localhost:22666/HtmlEdit.aspx?mid=0&page=--PLACEHOLDER--&test=12
http://localhost:22666/HtmlEdit.aspx?mid=0&page=--PLACEHOLDER--
http://localhost:22666/HtmlEdit.aspx?mid=0&pager=12&page=--PLACEHOLDER--
http://localhost:22666/HtmlEdit.aspx?&page=--PLACEHOLDER--&mid=0
于 2011-05-04T12:07:32.050 に答える