Perl Unicode 美食菜谱:不区分大小写的比较
℞ 21: Unicode 不区分大小写的比较
Unicode 不仅仅是一个扩展的字符集。Unicode 是一组关于字符行为的规则以及每个字符的一组属性。
比较字符串以确定它们是否等价通常需要将它们归一化到标准形式。这种归一化形式通常要求所有字符都处于特定的格式。℞ 20: Unicode 格式化展示了在 Unicode 中将大小写字符之间转换比简单地映射 [A-Z]
到 [a-z]
要复杂得多。(记住,许多字符还有标题格式!)
对于归一化比较的正确解决方案是执行 casefolding 而不是将某些字符的子集映射到另一个。Perl 5.16 添加了一个名为 fc() 或“foldcase”的新功能来执行 Unicode casefolding,就像 /i
模式修饰符一直提供的那样。这个功能可以通过 CPAN 模块 Unicode::CaseFold
在其他 Perls 中使用。
use feature "fc"; # fc() function is from v5.16
# OR
use Unicode::CaseFold;
# sort case-insensitively
my @sorted = sort { fc($a) cmp fc($b) } @list;
# both are true:
fc("tschüß") eq fc("TSCHÜSS")
fc("Σίσυφος") eq fc("ΣΊΣΥΦΟΣ")
正确折叠大小写更详细地介绍了 Perl 中的大小写折叠。
系列索引:标准序言
标签
反馈
这篇文章有什么问题吗?请在 GitHub 上打开一个 issue 或 pull request 来帮助我们。