Regex для ASP.NET URL переписать - PullRequest
0 голосов
/ 07 апреля 2011

Образец текста =

legacycard.ashx?save=false&iNo=3&No=555

Образец шаблона =

^legacycard.ashx(.*)No=(\d+)

Хотите получить для группы № 2 значение "555" (значение "Нет =" в тексте примера)

В Expresso это работает, но в ASP.NET UrlRewrite это не ловит.

Я что-то упустил?

Спасибо!

Ответы [ 4 ]

0 голосов
/ 07 апреля 2011

Просто используйте это регулярное выражение:

^legacycard\.ashx\?save=(false|true)&iNo=(?<ino>\d+)&No=(?<no>\d+)

Затем регулярное выражение замените на

${no}
0 голосов
/ 07 апреля 2011

Выглядит хорошо, ваше регулярное выражение должно соответствовать всей строке

legacycard.ashx? Сохранить = ложь и Ino = 3 & No = 555

не уверен, почему у вас есть группы, но группы также должны возвращать

? Сохранить = ложь и Ino = 3 &

и

555

Для хорошей меры вы должны знать, что. в legacycard.ashx также интерпретируется регулярным выражением, и вы обычно избегаете его, в этом случае это не имеет значения, потому что одна точка соответствует всему, также точка. :)

0 голосов
/ 07 апреля 2011

Попробуйте это

^legacycard.ashx(\?No=|.*?&No=)(\d+)

это должно работать.

0 голосов
/ 07 апреля 2011

Я бы сделал что-то вроде этого:

^legacycard.ashx\?(?:.+&)*No=(\d+)

\? будет экранировать знак вопроса, который обычно разделяет URL-адрес и параметры, затем вы убедитесь, что он захватит каждую пару ключ / значение параметра (все, что заканчивается на &) перед параметром, который вам действительно нужен около. Использование ?: позволяет вам указать, что набор скобок не захватывает (я предполагаю, что вам не понадобятся какие-либо данные, потенциально может немного ускорить ваше регулярное выражение) и оставляет вас просто 555 захваченными. Дополнительным преимуществом этого подхода является то, что он будет работать независимо от порядка параметров.

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