gpt4 book ai didi

elixir - 为什么 String.replace 用字符类将德语变音符号转换为二进制?

转载 作者:行者123 更新时间:2023-12-01 12:55:13 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

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

来自 h 正则表达式:

Modifiers

The modifiers available when creating a Regex are:

  • unicode (u) - enables unicode specific patterns like p and change modifiers like w, W, s and friends to also match on unicode. It expects valid unicode strings to be given on match

    ...

关于elixir - 为什么 String.replace 用字符类将德语变音符号转换为二进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36989921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com