【问题标题】:Which is the precise definition of the POSIX Regex [:alpha:] character class?POSIX Regex [:alpha:] 字符类的精确定义是什么?
【发布时间】:2015-11-11 16:25:30
【问题描述】:

我不清楚 POSIX [:alpha:] Regex 字符类是否严格等同于所有语言环境或字符集中的 Regex 表达式 [a-zA-Z],或者如果所讨论的语言环境或字符集允许,它是否还包括重音字符用于重音字符。

http://pubs.opengroup.org/onlinepubs/009696899/basedefs/xbd_chap09.html 的规范只提到它应该被所有语言环境支持,而不是它包含的内容。

有没有权威的地方明确定义了[:alpha:]字符类的确切含义?

【问题讨论】:

  • 您链接的参考资料似乎可以追溯到 2004 年,它链接到一个更新得多的版本。

标签: regex posix


【解决方案1】:

2013 spec, 9.3.5.7:

在 POSIX 语言环境中,范围表达式表示 整理落在整理中两个元素之间的元素 顺序,包容。 在其他语言环境中,范围表达式具有 未指定的行为:严格遵守的应用程序不应依赖 关于范围表达式是否有效,或者关于整理集 匹配的元素。

(已添加重点。)

所以,在 POSIX 语言环境之外,[a-zA-Z],严格来说,甚至不是 定义。 (当然,由于这些都是 ASCII 字符,实际上 我希望它在任何语言环境中都具有相同的含义。但考虑 EBCDIC,这些字符甚至不连续。所以可以 例外。)

[:alpha:] 的确切含义取决于语言环境,有很多, 许多语言环境,由各种实体定义。我当然不会 关于[:alpha:] 所做或未包含的任何假设 POSIX 以外的语言环境。

【讨论】:

  • 众所周知的 A-Z 反例包括不区分大小写的排序规则,其中包含 25 个小写字母,基于 AaBb...YyZ 范围或 AbB..yYzZ 范围,但这不应该影响A-Za-z,以及 z 介于 st (爱沙尼亚语,IIRC)之间的语言,应该如此。当然,许多语言环境中也包含其他字母(可能是重音版本)。
  • 只是为了澄清我的问题,将 POSIX 称为“POSIX 正则表达式风格”,而不是真正的 POSIX 语言环境。我们的工具有一个 Regex 引擎,它在 POSIX Regex ERE 中受到很大启发,我们想检查我们对 [:alpha:] 含义的解释是否与实际编写 POSIX Regex 规范的人的期望一致。
  • @Pep:按规范,POSIX 正则表达式取决于区域设置。但是,实现可能只实现正则表达式语法而不支持语言环境,这就是您需要查阅提供该功能的正则表达式库的确切文档的地方。
  • 顺便说一下,[a-z] 可以匹配piñatas 中的ñ,如果你在 Cygwin 上设置了LC_COLLATE="en_US.UTF-8"。测试代码[[ "piñatas" =~ ([a-z]*) ]] && echo "${BASH_REMATCH[1]}"
  • @nhahtdh 实际上我们在几年前编写了我们正在使用的 Regex 库,我想仔细检查是否对 [:alpha:] 有任何精确的期望。如果根据规范,一切顺利,那么我想我们的图书馆在规范方面没问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-07
相关资源
最近更新 更多