微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式 – Unicode和:alpha:

为什么这是假的:
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

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.

原文地址:https://www.jb51.cc/regex/356607.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐