我尝试以下echo 'ひらが' | grep '[[:alnum:]]'
并匹配字符串。
但我的语言环境显示英语:
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=en_US.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=
不应该[:alnum:]匹配在语言环境中设置的语言,这里发生了什么?
答案 0 :(得分:1)
我打算将此作为部分答案发布,因为我花了一些时间来挖掘这些信息,而且评论的时间太长了。
如果您在Linux安装上查看位于/usr/share/i18n/locales
的语言环境定义文件,我们可以找到LC_CTYPE
的定义(它定义了ctype.h
使用的字符分类。在en_US
中的C和POSIX字符类中的1}}从en_GB
复制定义,LC_CTYPE
中的en_GB
定义从i18n
复制定义,次要的补充。
查看文件i18n
,LC_CTYPE
定义的大部分内容就在这里。我们可以看到alpha
包含Unicode中定义的所有语言的字母,以下注释简要说明了基本原理:
% The "alpha" class of the "i18n" FDCC-set is reflecting
% the recommendations in TR 10176 annex A
alpha /
标准ISO/IEC TR 10176 standard的附件A似乎建议使用“用户定义标识符的扩展指令集”,这被认为是“为那些母语不是英语的程序员提高可理解性”,尽管我没有看看它与alpha
字符类的定义有什么关系。