为什么下划线属于\ w?

时间:2014-03-26 04:42:34

标签: regex

这可能是一个理论问题。

为什么下划线_位于正则表达式\w下,而不是\W

我希望这不是主要基于意见的,因为应该有理由。

如果可以的话,引用会很棒。

2 个答案:

答案 0 :(得分:8)

来自维基百科的Regular expression文章(强调我的):

  

某些工具理解的另一个非POSIX类是[:word:],通常定义为[:alnum:]加下划线。 这反映了这样一个事实:在许多编程语言中,这些是可以在标识符中使用的字符

中,此非标准类由\w表示(此类以外的字符代表\W)。

答案 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}实际上最近也添加到了字符类\where'一条消息,perl开发者交换了它的实现,支持我之前提到{ {1}}用于撰写标识符。