Еще один вопрос RegEx - PullRequest
       4

Еще один вопрос RegEx

1 голос
/ 20 июля 2010

Я абсолютно ненавижу RegEx, мне действительно нужно изучить его - он такой мощный. Вот проблема:

Я пытаюсь переписать URL в IIS, и у меня есть RegEx по умолчанию:

^([^/]+)/?$

Тем не менее, это позволяет вещам, подобным этому, business/profile.html пройти, но позволяет business-profile.html пройти.

Как мне изменить это так, чтобы оно пропустило первое?

Спасибо

Ответы [ 2 ]

3 голосов
/ 20 июля 2010

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

^          # Start of the string
(          # Take a group...
    [^/]+  # of one or more characters (the +) that are NOT the / character
)          # end of the group
/?         # an optional '/'
$          # End of string

Итак, это регулярное выражение соответствует:

  • Все строки, в которых нет символа /
  • Все строки, содержащие один / в конце

Чтобы «исправить» регулярное выражение, нам нужно знать, что вы на самом деле подразумеваете под «пропустить». Вы имеете в виду «соответствовать регулярному выражению?»

(Примечание: отличный ресурс - http://www.regular -expressions.info / - он предоставляет отличную справочную информацию и руководство по использованию инструментов регулярных выражений.)

2 голосов
/ 20 июля 2010

Первоначальная цель RE, по-видимому, состоит в том, чтобы "запретить любой URL с косой чертой внутри" (один в конце необязательно разрешен). Если ваша цель «запретить абсолютно ничего», ^(.*?)/?$ должно работать (с *?, означающим не жадное совпадение - диалекты RE отличаются такими сложными вещами, поэтому я не знаю, поддержат ли ваши). @Wrikken показал, как разрешить «максимум одну косую черту внутри», и это явно обобщает до «не более N косых черт внутри» для любого фиксированного N. Не зная точно, что вы хотите разрешить и что запретить, трудно быть полезнее! -)

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