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