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