【问题标题】:Locale specific behavior in the regex library?正则表达式库中特定于语言环境的行为?
【发布时间】:2012-01-28 07:33:54
【问题描述】:

当我为一个正则表达式对象注入一个特定的语言环境时,它如何影响匹配行为?它会影响排序规则还是其他什么?我似乎在任何地方都找不到解释。

【问题讨论】:

  • @DonStewart:我只对 C++ 细节感兴趣。地区特定的行为不一定在我想象的所有地方都相同。
  • 区域设置会影响符合 POSIX 的正则表达式引擎,这至少是大多数正则表达式库的起点。

标签: c++ regex c++11 locale


【解决方案1】:

它至少会影响以下方面:

  • 排序规则:带有法语语言环境的正则表达式 [a-f] 应与字符 é 匹配。
  • 类似地,芬兰语区域设置中的\w 应匹配字符 ä(但 [a-z] 不应,因为芬兰语中的 å、ä 和 ö 排列在 z 之后。然而,在德语中,@ 987654326@ 应该匹配 ä。)
  • 在与 Unicode 兼容的语言环境中,应使用 Unicode equivalence 算法,以便字符的组合形式与分解形式相匹配,反之亦然。
  • 使用与 POSIX 兼容的正则表达式(基本、扩展、awk、grep 和 egrep),POSIX character classes 应该是区域设置感知的:[=e=] 应该在法语区域设置中匹配 é,但在英语区域设置中不匹配。

【讨论】:

    【解决方案2】:

    请注意,在西班牙语言环境中,“ch”和“ll”不再被视为字母表中的单个字母,因为相关实体已更改了这一点。我找不到确切的日期,但现在“ch”和“ll”是两个字母:

    http://en.wikipedia.org/wiki/Ll

    我认为现在的实现反映了这一事实。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-23
      • 2012-05-10
      • 1970-01-01
      • 2013-11-18
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多