gpt4 book ai didi

regex - 如何检查哪种语言支持 Unicode 正则表达式中的哪个支持级别?

转载 作者:行者123 更新时间:2023-12-04 14:05:08 25 4
gpt4 key购买 nike

UTS#18 中描述了各种级别的 Unicode 正则表达式支持。 .

有没有办法对每个需求进行一些测试,因此可以将测试移植到相关语言,运行它们并收集结果?

其他 Unicode 文档是否也有支持级别的概念,例如。 G。用于字符串实现/库?

最佳答案

作为记录,ICU4C 和 Perl 都支持 UTS#18 Level 1 以及几个重要的 Level 2 特性。其中包括带有 \N{...} 的命名字符。 , 字形与 \X , 完整的属性,如 \p{East_Asian_Width=Full_Width} ,在 ICU 的情况下,还可以通过调整 \b 获得更漂亮的单词默认边界。 .所有这三个 Level-2 正则表达式功能都显着简化了在 Unicode 上使用正则表达式,没有它们,你最多只能做不愉快的事情,最坏的情况是根本无法做到。

Perl 和 ICU4C 虽然有些不同,因为 Perl 支持完全基于字符串的大小写折叠,而 ICU 只支持简单的基于字符的大小写折叠。 Perl 还有很多 ICU 不支持的非 Unicode 正则表达式扩展,例如正则表达式中的环视和命名组,它们都非常有用。

Perl 还允许用户定义/自定义属性和命名字符,这对很多事情都很有用,包括私有(private)使用区域 (PUA) 代码点,因为您现在可以为您喜欢使用的任何 PUA 字符定义自己的名称和属性。 (例如,对于计划包含在 Unicode 中的脚本,例如 unofficial ConScript registry 中的脚本。)

在最近发布的 JDK7 之前,Java 甚至不支持 UTS#18 Level 1,而且只支持最低限度。对于 Java6 或更早版本,各种小东西都是错误的或缺失的。总而言之,JDK 中 Java 的 Unicode 支持很弱:你应该使用 ICU4J 的 UCharacter etc 类,而不是 OraSun 类,用于任何严肃的 Unicode 工作,否则你会发疯的。真的。

但除了这几个之外,没有什么比这更接近了。 如果你很小心并且不需要做太多事情,你有时可以在 Python 或 Ruby 中蹒跚前行:例如,没有排序或搜索,几乎没有 Unicode 字符属性,甚至没有正确的单词边界等。

尝试在 Javascript 或 PHP 中使用 Unicode 做任何事情的人应该在开始之前退出。这太痛苦了,因为如果不访问字符属性和可能的​​字素,就无法以任何有用或现实的方式操作 Unicode。

还有跨语言的 Unicode 问题,例如大小写映射和大小写折叠、规范化、换行和整理,所有这些都因语言而异。对于 Unicode 工作,您需要访问大部分(如果不是全部的话)。几乎所有语言都没有完全的属性支持是一个真正的问题,因为字符属性是许多算法所依赖的基础。

我在我的 Unicode Support Shootout 中谈到了大部分内容。讲话。

底线

最重要的是,在撰写本文时,如果您不能使用 ICU 正则表达式或 Perl 本身(但不能使用 PCRE),或者也不能使用 Matthew Barnett 的 regex Python 中的库,那么你基本上就被 Unicode 正则表达式搞砸了。尽管 Unicode 已有 20 年的历史,但目前没有其他人足够认真地对待正则表达式和/或 Unicode。

这对 Javascript 和 PHP 等“webbish”语言具有严重影响,因为没有可用的替代方案,因此您必须将任何实际工作卸载到不同的服务器端语言,因为 webbish 语言无法以任何合理的方式处理 Unicode时尚。在客户端根本没有任何东西可以工作,这是一个沉重的负担。

另外,请注意,通过 Java 获取 ICU 正则表达式需要滚动您自己的 JNI(或使用来自 Android 的 JNI)来获取 ICU4C:ICU 正则表达式没有 ICU4J 绑定(bind)。

关于regex - 如何检查哪种语言支持 Unicode 正则表达式中的哪个支持级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7125542/

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