有没有简洁的表达方式:
\w but without _
即“\w 中包含的所有字符,_ 除外”
我问这个是因为我正在寻找最简洁的方式来表达域名验证。域名可以包含小写和大写字母、数字、句号和破折号,但不能包含下划线。\w 包括以上所有内容,外加一个下划线。那么,有没有办法通过正则表达式语法从 \w 中“删除”下划线?
编辑:我在询问 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.-]
一些正则表达式风格具有您可能使用的否定后向语法:
\w(?<!_)
我会从 [^_] 开始,然后想想我还需要拒绝哪些字符。如果您需要过滤键盘输入,枚举所有不需要的字符非常简单。
你可以这样写:
\([^\w]|_)\u
如果您将此字符串与 preg_filter 一起使用,则 \w 中的任何字符(不包括 _ 下划线)都将被过滤。