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