grep POSIX正则表达式匹配印地语和日语

时间:2015-07-17 09:57:43

标签: regex linux posix

我尝试以下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:]匹配在语言环境中设置的语言,这里发生了什么?

1 个答案:

答案 0 :(得分:1)

我打算将此作为部分答案发布,因为我花了一些时间来挖掘这些信息,而且评论的时间太长了。

如果您在Linux安装上查看位于/usr/share/i18n/locales的语言环境定义文件,我们可以找到LC_CTYPE的定义(它定义了ctype.h使用的字符分类。在en_US中的C和POSIX字符类中的1}}从en_GB复制定义,LC_CTYPE中的en_GB定义从i18n复制定义,次要的补充。

查看文件i18nLC_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字符类的定义有什么关系。