【问题标题】:Why does String.replace with character classes convert German umlauts to Binaries?为什么 String.replace 用字符类将德语变音符号转换为二进制?
【发布时间】:2016-05-03 12:01:31
【问题描述】:

(抱歉,如果我关于二进制的术语已关闭 - 我仍在开始使用 Elixir)

在解决Exercism questions for Elixir 之一时,我注意到String.replaceRegex.replace 在使用[:alnum:] 字符类时显然将德语变音符号转换为二进制:

iex(1)> String.replace("ö", ~r/[[:alnum:]]/, "_")
<<95, 182>>
iex(2)> String.replace("ö", ~r/[^[:alnum:]]/, "_")
<<195, 95>>
iex(3)> String.replace("ö", ~r/[_]/, " ")
"ö"

这种行为是由我使用[:alnum:] 字符类引起的吗? (真正让我困惑的是第一个和第二个版本都返回一个二进制文件)

【问题讨论】:

    标签: elixir


    【解决方案1】:

    您需要将 u 修饰符传递给正则表达式,以便 [:alnum:] 和其他此类模式匹配 Unicode 字符串。

    iex(1)> String.replace("ö", ~r/[[:alnum:]]/u, "_")
    "_"
    iex(2)> String.replace("ö", ~r/[^[:alnum:]]/u, "_")
    "ö"
    

    来自h Regex

    修饰符

    创建正则表达式时可用的修饰符有:

    • unicode (u) - 启用 unicode 特定模式,例如 p 和 change 像 w、W、s 和朋友这样的修饰符也可以在 unicode 上匹配。它预计 匹配时给出的有效 unicode 字符串

      ...

    【讨论】:

      猜你喜欢
      • 2016-01-21
      • 2019-09-27
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 2017-12-19
      • 2011-07-26
      • 1970-01-01
      相关资源
      最近更新 更多