Строковая функция (regex?) Для удаления пары строк запроса из строки URL - PullRequest
2 голосов
/ 09 января 2012

В следующем примере "строки":

  • somePage.aspx? Id = 20 & name = brian & token = 1234
  • somePage.aspx? Id = 20 & token = 1234 & name = brian
  • somePage.aspx? Token = 1234 & id = 20 & name = brian

Я хочу удалить пару имя / значение для токена во всех случаях, поэтому у меня осталось:

  • somePage.aspx? Id = 20 & name = brian
  • somePage.aspx? Id = 20 & name = brian
  • somePage.aspx? Id = 20 & name = brian

Примечание: я не могу использовать класс Uri по разным причинам.

Существует ли одна функция регулярного выражения или строковая функция, которая может это сделать?

Ответы [ 3 ]

4 голосов
/ 09 января 2012

Я думаю, что это сделает это за вас (у меня не было возможности проверить).

string s = "somePage.aspx?id=20&name=brian&token=1234";
s = Regex.Replace(s, @"(&token=[^&\s]+|token=[^&\s]+&?)", "");

Редактировать: Обновлено для корректной обработки случая, когда токен является первой парой.

2 голосов
/ 09 января 2012

Рассмотрите возможность использования HttpUtility.ParseQueryString (http://msdn.microsoft.com/en-us/library/ms150046.aspx) для разбора и UriBuilder для построения обратно ...

Будьте осторожны со всеми кодировками и упорядочением параметров в строке запроса - класс Uri поможет с этим.

2 голосов
/ 09 января 2012
(\btoken=[^&]*&|[\?&]token=[^&]*$)

См. https://regexr.com/3ia6k

Это регулярное выражение удаляет параметр token во всех вариантах, включая вариант, где токен является единственным параметром:

  • somePage.aspx? Лексема = 1234

Пояснение:

Часть 1: \btoken=[^&]*&

... ловит token, включая его значение и завершающий &.
Эта часть обрабатывает следующие случаи:

  • somePage.aspx? ID = 20 & лексема = 1234 & имя = Брайен
  • somePage.aspx? Лексема = 1234 & ID = 20 & имя = Брайен

Часть 2: [\?&]token=[^&]*$

... ловит token, когда он появляется как последний параметр и / или единственный параметр, вместе с его ведущим ? или &.
Эта часть обрабатывает следующие случаи:

  • somePage.aspx? ID = 20 & имя = Брайен и маркер = 1234
  • somePage.aspx? Лексема = 1234
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...