(如果我的关于二进制文件的术语已经关闭,我会道歉 - 我仍然开始使用Elixir)
在解决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/[_]/, " ")
"ö"
Run Code Online (Sandbox Code Playgroud)
这种行为是由我使用的[:alnum:]字符类引起的吗?(真正令我感到困惑的是,第一版和第二版都返回二进制版)
您需要将u修饰符传递给Regex,以便[:alnum:]在Unicode字符串上匹配其他此类模式.
iex(1)> String.replace("ö", ~r/[[:alnum:]]/u, "_")
"_"
iex(2)> String.replace("ö", ~r/[^[:alnum:]]/u, "_")
"ö"
Run Code Online (Sandbox Code Playgroud)
来自h Regex:
修饰符
创建正则表达式时可用的修饰符是:
unicode(u) - 启用unicode特定模式,如p和更改修饰符,如w,W,s和friends也匹配unicode.它期望在匹配时给出有效的unicode字符串
...
| 归档时间: |
|
| 查看次数: |
295 次 |
| 最近记录: |