Замените значение QueryString с помощью регулярных выражений - PullRequest
3 голосов
/ 15 сентября 2009

В C # я пытаюсь использовать регулярные выражения для замены значений в строке запроса. Итак, если у меня есть:

http://www.url.com/page.aspx?id=1

Я хотел бы написать функцию, в которой я передаю URL-адрес, значение строки запроса и значение для замены. Что-то вроде:

string url = "http://www.url.com/page.aspx?id=1";
string newURL = ReplaceQueryStringValue(url, "id", "2");

private string ReplaceQueryStringValue(string url, string replaceWhat, string replaceWith)
{
    return Regex.Replace(url, "[^?]+(?:\?"+replaceWhat+"=([^&]+).*)?",replaceWith);
}

Ответы [ 2 ]

10 голосов
/ 15 сентября 2009

Вот функция, которая сделает эту работу:

static string replace(string url, string key, string value)
{
    return Regex.Replace(
        url, 
        @"([?&]" + key + ")=[^?&]+", 
        "$1=" + value);
}
2 голосов
/ 15 сентября 2009

Возможно, будет проще использовать String.Split для первоначального вырезания URL-адреса на части страницы и строки запроса, а затем снова использовать Split.String для разрезания строки запроса на отдельные части.

var urlSplit = url.Split('?');
var originalURL = urlSplit[0];

var urlRedefined = url;   
if(urlSplit.Length == 2)
{
  var queryString = urlSplit[1].Split('&');

  //your code here

  var urlRedefined = String.Format("{0}?{1}", 
    originalURL, 
    String.Join("&", queryString);
}

Регулярное выражение может быть излишним для ваших нужд. Кроме того, класс System.Uri может быть лучше. Его использование покрыто URL, разделенным на C #? .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...