正则表达式:如何表达\ w没有下划线

时间:2013-02-13 16:35:55

标签: php regex url

是否有简洁的表达方式:

\w but without _

即,“除了_”

之外,所有字符都包含在\ w中

我问这个是因为我正在寻找表达域名验证的最简洁方式。域名可以包括小写和大写字母,数字,句号和破折号,但不包括下划线。 \ w包括以上所有内容,加上下划线。那么,有没有办法通过正则表达式语法从\ w“删除”下划线?

编辑:我问的是PHP中使用的正则表达式。

提前致谢!

7 个答案:

答案 0 :(得分:31)

以下字符类(在Perl中)

[^\W_]

\W[^\w]

相同

答案 1 :(得分:8)

您可以使用negative lookahead(?!_)\w

但是,我认为编写[a-zA-Z0-9.-]更具可读性。

答案 2 :(得分:3)

为了安全起见,通常我们会使用字符类:

[a-zA-Z0-9.-]

上面的正则表达式“片段”匹配英文字母和数字,加上句点.和短划线-。它应该在最基本的正则表达式支持下工作。

缩短可能会更好,但前提是你确切知道它代表什么。

我不知道你使用的语言是什么。在很多引擎中,\w相当于[a-zA-Z0-9_](有些需要“ASCII模式”)。但是,某些引擎对正则表达式具有Unicode支持,并且可以扩展\w以匹配Unicode字符。

答案 3 :(得分:3)

如果我的理解是正确的\w表示[A-Za-z0-9_]句号,则不包括短划线。

信息: http://en.wikipedia.org/wiki/Regular_expression#POSIX_character_classes

所以我想你想要的是[a-zA-Z0-9.-]

答案 4 :(得分:1)

有些正则表达式可能会使用负面的lookbehind语法:

\w(?<!_)

答案 5 :(得分:1)

我会从[^ _]开始,然后想一想我还需要拒绝的其他角色。如果您需要过滤键盘输入,则枚举所有不需要的字符非常简单。

答案 6 :(得分:0)

你可以这样写:

\([^\w]|_)\u

如果对此字符串使用preg_filter,则会过滤\ w(不包括_下划线)中的任何字符。