2010-07-19 4 views
1

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

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

^([^/]+)/?$ 

Однако это позволить вещи, как этот business/profile.html через, но она позволяет business-profile.html через ,

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

Благодаря

+0

Что вы пытаетесь сделать? Это приведет к лучшему ответу. –

+0

Я пытаюсь добавить удобные для пользователя URL-адреса на мой сайт, используя переписывание URL-адресов в IIS 7. – bear

ответ

3

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

^   # 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 

Так что регулярное выражение соответствует:

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

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

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

+0

+1 для пропаганды лучшего понимания. –

+0

Пропустив, я имею в виду, сопоставляю RegEx – bear

+0

+1. Хотя, поскольку мы ничего не фиксируем, группа, не захватывающая захват, была бы лучше, возможно, мы также можем выжать некоторую предварительную оптимизацию с помощью двигателя. – Anders

2

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