为什么Ruby/[[:punct:]] /会遗漏一些标点字符?

Sai*_*Sai 13 ruby regex posix

Ruby /[[:punct:]]/应该匹配所有"标点字符".根据维基百科,这意味着/[\]\[!"#$%&'()*+,./:;<=>?@\^_`{|}~-]/每POSIX标准.

它匹配:-[]\;',./!@#%&*()_{}::"?.

但是,它匹配:=`~$^+|<>(至少在红宝石1.9.3p194).

是什么赋予了?

Tod*_*obs 11

标点字符类由语言环境定义.punct的Open Group LC_TYPE定义说:

定义要分类为标点字符的字符.在POSIX语言环境中,<space>不应包括alpha,digit或cntrl类中的任何字符.在区域设置定义文件中,不会为关键字upper,lower,alpha,digit,cntrl,xdigit或指定的关键字指定字符.

基本上,它定义了如何通过排除其他字符类来定义punct,但它实际上并不直接定义标点符号 - 这是区域设置的工作.

我找不到每个语言环境中的规范参考.也许别人知道.同时,您可以找到与您想要的punct字符类匹配的LC_TYPE ,或者直接指定该类.