Регулярное выражение: соответствует всем, кроме двух точек - PullRequest
2 голосов
/ 26 июня 2010

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

#valid path
/home/user/somedir/somedir_2
#evil path
/home/user/../somedir_2/

Я знаю, как проверить две точки в пути:

\.\. or [\.]{2}

Но я действительно хочу сделать что-то подобное:

/home/user/<match everything but two dots>/somedir_2/

так что «соответствовать всем, кроме двух точек» может быть все, кроме двух точек.

Я пытался:

/home/user/[^\.{2}]*/somedir_2/

но безуспешно.

Ответы [ 2 ]

3 голосов
/ 26 июня 2010

Спецификация не ясна, но вы можете использовать негативный взгляд, чтобы сделать что-то вроде этого:

^(?!.*thatPattern)thisPattern$

Приведенное выше совпадет со строками, которые соответствуют thisPattern, но не в случае совпадения thatPattern.

Вот пример ( как видно на rubular.com ):

^(?!.*aa)[a-z]*$

Это будет соответствовать ^[a-z]*$, но не будет, если оно содержит aa где-либо.

Ссылки

1 голос
/ 26 июня 2010
^/home/user/(?!.*\.\.).*$

будет соответствовать вашему хорошему образцу и отвергнет ваш злой.

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