这可能是一个理论问题。
为什么下划线_
位于正则表达式\w
下,而不是\W
下
我希望这不是主要基于意见的,因为应该有理由。
如果可以的话,引用会很棒。
答案 0 :(得分:8)
来自维基百科的Regular expression文章(强调我的):
某些工具理解的另一个非POSIX类是
[:word:]
,通常定义为[:alnum:]
加下划线。 这反映了这样一个事实:在许多编程语言中,这些是可以在标识符中使用的字符 。
答案 1 :(得分:2)
\w
匹配具有以下任何属性的任何单个代码点:
\p{GC=Alphabetic}
(字母和更多unicode点)
\p{GC=Mark}
(标记:间距,非间距,封闭)
\p{GC=Connector_Punctuation}
(例如下划线)
\p{GC=Decimal_Number}
(数字及其他数字变体)
\p{Join_Control}
(代码点U + 0200C和U + 0200D)
这些属性用于脚本中编程语言标识符的组合。例如 [1] :
添加了连接符标点符号(
\p{GC=Connector_Punctuation}
)以用于编程语言标识符,从而添加" _"和类似的人物。
有一个 [2] :
一般意图,标识符由一系列以字母或表意文字开头的字符组成,后跟任意数量的字母,表意符号,数字或下划线。
\p{Join_Control}
实际上最近也添加到了字符类\w
和here'一条消息,perl开发者交换了它的实现,支持我之前提到{ {1}}用于撰写标识符。