regex.replace Параметры строки запроса - PullRequest
2 голосов
/ 16 февраля 2010

Не знаю, возможно ли это вообще, у меня есть следующее регулярное выражение (? <= [\? | \ &]) (? [^ \? = \ & #] +) =? (? [ ^ \? = \ & #] *) & который разбивает URL на пары ключ / значение. Я хотел бы использовать это в функции замены для создания некоторой разметки: </p>

string sTest = "test.aspx?width=100&height=200&";
            ltTest.Text = Regex.Replace(sTest, @"(?<=[\?|\&])(?<key>[^\?=\&\#]+)=?(?<value>[^\?=\&\#]*)&",
                                                "< div style='width:$2px; height:$2px; border:solid 1px red;'>asdf</div>");

это генерирует:

test.aspx?<div style='width:100px; height:100px; border:solid 1px red;'>asdf</div><div style='width:200px; height:200px; border:solid 1px red;'>asdf</div>

Есть идеи?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 16 февраля 2010

Во-первых, у .net есть лучшие способы справиться с вашей проблемой. Рассмотрим HttpUtility.ParseQueryString:

string urlParameters = "width=100&height=200";
NameValueCollection parameters = HttpUtility.ParseQueryString(urlParameters);
s = String.Format("<div style='width:{0}px; height:{1}px;'>asdf</div>",
                   parameters["width"], parameters["height"]);

Это поможет вам сбежать, так что это лучший вариант.


Далее, к вопросу, ваш код не работает, потому что вы используете его неправильно. Вы ищете пары key=value и , заменяющие каждую пару на <div width={value} height={value}>. Таким образом, вы получите множество DIV в качестве значений.
Вы должны сделать более хирургическое совпадение, например (с некоторыми добавленными проверками):

string width = Regex.Match(s, @"width=(\d+)").Groups[1].Value;
string height = Regex.Match(s, @"height=(\d+)").Groups[1].Value;
s = String.Format("<div style='width:{0}px; height:{1}px;'>asdf</div>",
                   width, height);
0 голосов
/ 16 февраля 2010

Есть ли причина, по которой вы захотите использовать регулярное выражение для обработки этого вместо функции Request.QueryString, чтобы получить данные и поместить их в строку?

Прямо сейчас вам нужно будет сделать гораздо более конкретное регулярное выражение, чтобы получить значение каждой пары ключ / значение и поместить их в замену.

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