为什么下划线(_)不被视为非单词字符?

问题描述 投票:0回答:5

为什么下划线

_
不被视为非单词字符?此正则表达式
\W
匹配所有非单词字符,但不匹配下划线。

regex whitespace
5个回答
15
投票

参考 Jeffrey Friedl 关于正则表达式的书,这最初是对 Perl 正则表达式的更改。根据允许命名 Perl 变量的字符,回到 1988 年 [第 89 页]:

Perl 2 于 1988 年 6 月发布。Larry 替换了正则表达式代码 完全是,这次使用了亨利的大大增强版本 上一节提到的 Spencer 包。你还可以 最多有九组括号,但现在你可以使用

|
在他们里面。添加了对
\d
\s
的支持,并对
\w
的支持已添加 更改为包含下划线,从那时起它将匹配什么 Perl 变量名中允许使用字符。


8
投票

\W
定义为
[^A-Za-z0-9_]

它与

\w
相反,是
[A-Za-z0-9_]
,意思是“一个单词字符”。

这与您在口语中所感知的单词无关。这里的“单词”指的是标识符,可以用来在编程语言中命名变量或类型的单词。

许多编程语言只允许在标识符中使用大写和小写字母、数字和下划线 (

_
)。有些语言允许使用其他字符,但在发明正则表达式时,允许使用其他字符的语言较少,并且大多数语言仅允许与标识符中的
\w
匹配的字符。


0
投票

下划线代表空格,尤其是在给定名称中。

但是,实际空间具有语法意义,例如分隔命令的各个部分。


-1
投票

“单词字符”的定义是基于许多编程语言中可以用作标识符一部分的字符,即[A-Za-z0-9_]。


-2
投票

根据 regex101:

\w matches any non-word character (equal to [^a-zA-Z0-9_])
。这似乎是设计师的选择。

© www.soinside.com 2019 - 2024. All rights reserved.