Соответствие регулярному выражению без конечного символа - PullRequest
2 голосов
/ 18 ноября 2009

Я пытаюсь сопоставить любые запросы на URL, которые не имеют символа папки (/) или заканчиваются расширением (.aspx). Я могу пока игнорировать значения и фрагменты строки запроса в регулярном выражении. Пока у меня есть следующее.

^([\w-/]+)(?!\.aspx|/)$

Однако, если я запустил это выражение, он выбрал финал / в группе, чего я не хочу. Цель состоит в том, чтобы добавить .aspx к URL-адресам, для которых он не указан, с помощью Isapi ReWrite, а затем перенаправить запрос на механизм .NET.

В приведенном ниже примере все символы в текущем совпадении выделены жирным шрифтом

asd.aspx
это
Some.aspx
this / test / (не хочу финал /)
this-test / (не хочу финал /)
этот тест
этот тест / что / тест

Может ли кто-нибудь предложить выражение, которое не выберет окончательное / если будет найдено в выражении?

Ответы [ 4 ]

4 голосов
/ 18 ноября 2009

Попробуйте обратное утверждение:

^([\w-/]+)(?<!/|\.aspx)$
1 голос
/ 18 ноября 2009

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

  1. Если строка заканчивается на .aspx, дальнейшая обработка не производится.
  2. В противном случае, если строка заканчивается на /, удалите эту косую черту.
  3. Обработка строки.

Может быть, вы пытаетесь сделать слишком много с помощью регулярного выражения?

Почему бы не выполнить явное тестирование вашего расширения (.aspx), а если его у вас нет, то обнаружить косую черту терминала и удалить ее перед дополнительной обработкой строки?

То есть: я уверен, что можно создать регулярное выражение с отрицательным прогнозом, которое будет выполнять 1 и 2, но не будет ли яснее сделать это явно.

Возможно, вы захотите проверить еще несколько примеров:

foo/bar/.aspx
foo/bar.aspx/
foo.aspx/bar
foo.aspx/bar/

Просто чтобы быть уверенным, что вы знаете, что ожидаете получить.

1 голос
/ 18 ноября 2009

Переместить / за пределы группы ():

^([\w-/]+)(?!\.aspx)/?$
0 голосов
/ 18 ноября 2009

Удалите / из регулярного выражения и добавьте его снаружи и укажите, что оно может иметь 0 или 1 вхождение.

^ ([\ ш - /] +) (?!. ASPX) (/) {0,1} $

...