为什么下划线
_
不被视为非单词字符?此正则表达式 \W
匹配所有非单词字符,但不匹配下划线。
参考 Jeffrey Friedl 关于正则表达式的书,这最初是对 Perl 正则表达式的更改。根据允许命名 Perl 变量的字符,回到 1988 年 [第 89 页]:
Perl 2 于 1988 年 6 月发布。Larry 替换了正则表达式代码 完全是,这次使用了亨利的大大增强版本 上一节提到的 Spencer 包。你还可以 最多有九组括号,但现在你可以使用
在他们里面。添加了对|
和\d
的支持,并对\s
的支持已添加 更改为包含下划线,从那时起它将匹配什么 Perl 变量名中允许使用字符。\w
\W
定义为 [^A-Za-z0-9_]
。
它与
\w
相反,是[A-Za-z0-9_]
,意思是“一个单词字符”。
这与您在口语中所感知的单词无关。这里的“单词”指的是标识符,可以用来在编程语言中命名变量或类型的单词。
许多编程语言只允许在标识符中使用大写和小写字母、数字和下划线 (
_
)。有些语言允许使用其他字符,但在发明正则表达式时,允许使用其他字符的语言较少,并且大多数语言仅允许与标识符中的 \w
匹配的字符。
下划线代表空格,尤其是在给定名称中。
但是,实际空间具有语法意义,例如分隔命令的各个部分。
“单词字符”的定义是基于许多编程语言中可以用作标识符一部分的字符,即[A-Za-z0-9_]。
根据 regex101:
\w matches any non-word character (equal to [^a-zA-Z0-9_])
。这似乎是设计师的选择。