Регулярные выражения: как выразить w без подчеркивания
Есть ли краткий способ выразить:
w but without _
То есть "все символы, включенные в w, кроме _"
Я спрашиваю об этом, потому что ищу наиболее лаконичный способ выразить проверку доменных имен. Доменное имя может содержать строчные и прописные буквы, цифры, знаки точки и тире, но без подчеркивания. w включает все вышеперечисленное, плюс подчеркивание. Итак, есть ли способ "удалить" подчеркивание из w с помощью синтаксиса регулярных выражений?
Отредактировано: я спрашиваю о регулярных выражениях, используемых в PHP.
Заранее спасибо!
7 ответов:
Вы могли бы использовать отрицательный lookahead:
Тем не менее, я думаю, что запись(?!_)\w
[a-zA-Z0-9.-]
более удобочитаема.
На всякий случай, как правило, мы будем использовать класс символов:
"Фрагмент" регулярного выражения выше соответствует английскому алфавиту и цифрам, плюс период[a-zA-Z0-9.-]
.
и тире-
. Он должен работать даже с самой базовой поддержкой регулярных выражений. Более короткий может быть лучше, но только если вы точно знаете, что он представляет. Я не знаю, какой язык вы используете. Во многих движках\w
эквивалентно[a-zA-Z0-9_]
(для некоторых требуется "режим ASCII"). Однако некоторые движки имеют Unicode поддержка регулярных выражений, и может расширить\w
, чтобы соответствовать символам Юникода.
Если мое понимание верно
\w
означает[A-Za-z0-9_]
знаки периода, тире не включены.Информация: http://en.wikipedia.org/wiki/Regular_expression#POSIX_character_classes
Итак, я думаю, что вы хотите
[a-zA-Z0-9.-]
Некоторые регулярные выражения имеют отрицательный синтаксис lookbehind, который вы можете использовать:
\w(?<!_)