Какое правильное регулярное выражение соответствует, когда определенной строки нет - PullRequest
1 голос
/ 29 мая 2009

Я отчаянно ищу регулярное выражение, которое соответствует любому от a до z, от A до Z, от 0 до 9 и "-" Одно и то же регулярное выражение не должно совпадать, если проверяемая строка равна «admin».

Я пробовал это:

/^(?!admin)|([-a-z0-9]{1,})$/i

но это не работает, оно соответствует строке admin, даже если я добавил отрицательный прогноз.

Я использую это регулярное выражение с PHP (PCRE).

Ответы [ 4 ]

6 голосов
/ 29 мая 2009

Делать «А, а не В» в одном регулярном выражении сложно. Обычно лучше (яснее, проще) вместо этого сделать это в двух частях. Если это не вариант, это можно сделать. Вы на правильном пути с негативным прогнозом, но чередование убивает вас.

/^(?!admin$)[-a-zA-Z0-9]+$/

В расширенном синтаксисе Perl это:

/
  ^               # beginning of line anchor
  (?!             # start negative lookahead assertion
     admin        #   the literal string 'admin'
     $            #   end of line anchor
  )               # end negative lookahead assertion
  [-a-zA-Z0-9]+   # one or more of a-z, A-Z, 0-9, or '-'
  $               # end of string anchor
/x
3 голосов
/ 29 мая 2009

Является ли регулярное выражение единственным доступным инструментом для вас? Может быть проще сделать что-то вроде (синтаксис Perl):

if ($string ne "admin" && $string =~ /^[-a-z0-9]+$/i) { ...
1 голос
/ 29 мая 2009

Я думаю, что это сработает, если вы удалите оператор "или" (|). Прямо сейчас вы в основном говорите: соответствует, если это буквы и т. Д. ИЛИ не равно admin, поэтому оно всегда возвращает true, потому что когда оно равно admin, оно все равно соответствует другому выражению.

0 голосов
/ 29 мая 2009

^ (?! [\.] * [АА] [дБ] [мм] [Ii] [NN] [\.] * $) ([A-Za-z0-9] {1} $)

Попробуйте поэкспериментировать с инструментом тестирования регулярных выражений, таким как regex-freetool, на code.google.com

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