标题很好地总结了这一点。我正在寻找与 Postgres ~ 运算符的 Unicode 大写字符匹配的正则表达式。
明显的方法行不通:
=> select 'A' ~ '[[:upper:]]';
?column?
----------
t
(1 row)
=> select 'Ó' ~ '[[:upper:]]';
?column?
----------
t
(1 row)
=> select 'Ą' ~ '[[:upper:]]';
?column?
----------
f
(1 row)
我使用的是 Postgresql 9.1,我的语言环境设置为 pl_PL.UTF-8。订购工作正常。
=> show LC_CTYPE;
lc_ctype
-------------
pl_PL.UTF-8
(1 row)
PG 9.1 及更早版本的正则表达式引擎无法正确分类代码点不适合一个字节的字符。
的代码点为'Ó'
211 是正确的,但是代码点'Ą'
是260,超过255。
PG 9.2 在这方面做得更好,但对于所有字母表仍然不是 100% 正确。看到这个commit在 PostgreSQL 源代码中,特别是注释的这些部分:
删除不考虑 wctype.h 结果的硬连线限制
255以上的字符代码
and
不过,我们可以将其提高到 U+7FF(我选择它作为限制)
2字节UTF8字符),这至少会让东欧人
很高兴有更好的解决方案
不幸的是这没有向后移植到 9.1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)