String.match-6ren">
gpt4 book ai didi

regex - Unicode 和 :alpha:

转载 作者:行者123 更新时间:2023-12-04 10:48:57 26 4
gpt4 key购买 nike

这是为什么false :

iex(1)> String.match?("汉语漢語", ~r/^[[:alpha:]]+$/)
false
但这是 true ?:
iex(2)> String.match?("汉语漢語", ~r/[[:alpha:]]/)
true
有时 [:alpha:]是unicode,有时不是?
编辑:
我认为我最初的例子不够清楚。
这是为什么 false :
iex(1)> String.match?("汉", ~r/^[[:alpha:]]+$/)
false
但这是 true ?:
iex(2)> String.match?("汉", ~r/[[:alpha:]]/)
true

最佳答案

当您以非 Unicode 模式将字符串传递给正则表达式时,它会被视为字节数组,而不是 Unicode 字符串。见 IO.puts byte_size("汉语漢語") (12,输入包含的所有字节: 230,177,137,232,175,173,230,188,162,232,170,158 )和 IO.puts String.length("汉语漢語") (4、Unicode“字母”)的区别。字符串中有无法与 [:alpha:] 匹配的字节POSIX 字符类。因此,第一个表达式不起作用,而第二个表达式起作用,因为它只需要 1 个字符即可返回有效匹配项。

要将 Unicode 字符串与 PCRE 正则表达式库(Elixir 中使用的)正确匹配,您需要使用 /u 启用 Unicode 模式。修饰符:

IO.puts String.match?("汉语漢語", ~r/^[[:alpha:]]+$/u)

IDEONE demo (打印 true)

Elixir regex reference :

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

关于regex - Unicode 和 :alpha:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33586468/

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