正则表达式 – Unicode和:alpha:
发布时间:2020-12-13 22:54:31 所属栏目:百科 来源:网络整理
导读:为什么这是假的: iex(1) String.match?("汉语漢語",~r/^[[:alpha:]]+$/)false 但这是真的吗? iex(2) String.match?("汉语漢語",~r/[[:alpha:]]/)true 有时[:alpha:]是unicode,有时它不是? 编辑: 我认为我原来的例子不够清楚. 为什么这是假的: iex(1)
为什么这是假的:
iex(1)> String.match?("汉语漢語",~r/^[[:alpha:]]+$/) false 但这是真的吗? iex(2)> String.match?("汉语漢語",~r/[[:alpha:]]/) true 有时[:alpha:]是unicode,有时它不是? 编辑: 我认为我原来的例子不够清楚. 为什么这是假的: iex(1)> String.match?("汉",~r/^[[:alpha:]]+$/) false 但这是真的吗? iex(2)> String.match?("汉",~r/[[:alpha:]]/) true
当您以非Unicode模式将字符串传递给正则表达式时,它将被视为字节数组,而不是Unicode字符串.请参阅IO.puts byte_size(“汉语汉语”)(12,输入所包含的所有字节:230,177,137,232,175,173,230,188,162,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(打印真实) 见Elixir regex reference:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |