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

Dim*_*zov 21 php regex url

是否有简洁的表达方式:

\w but without _
Run Code Online (Sandbox Code Playgroud)

也就是说,"所有字符都包含在\ w中,除了_"

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

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

提前致谢!

pro*_*ist 35

以下字符类(在Perl中)

[^\W_]
Run Code Online (Sandbox Code Playgroud)

\W 是相同的 [^\w]

  • 用文字来思考:(不是(不是单词)或下划线)其中单词是“[a-zA-Z0-9_]” (2认同)

Ber*_*rgi 9

您可以使用否定前瞻:(?!_)\w

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


nha*_*tdh 5

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

[a-zA-Z0-9.-]
Run Code Online (Sandbox Code Playgroud)

上面的正则表达式“片段”匹配英文字母和数字,加上句点.和破折号-。即使有最基本的正则表达式支持,它也应该可以工作。

越短可能越好,但前提是您确切地知道它代表什么。

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

  • 这将排除所有 unicode 字符,如“äö”等。 (10认同)