gpt4 book ai didi

java - 使用 Java 正则表达式匹配 BMP : it is possible at all? _外部_的一系列 Unicode 代码点

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:22:42 27 4
gpt4 key购买 nike

虽然一开始完全不相关,this question让我想知道...

Java 的正则表达式基于StringStringchar 的序列(数组);和 char 最终是 UTF-16 代码单元。

后者意味着单个 char 可以匹配 BMP 中的任何 Unicode 代码点,即从 U+0000 到 U+FFFF。

然而,在 BMP 之外,单个代码点需要两个 char(一个用于前导代理项,另一个用于尾随代理项);据我所知,除了专用语法引擎外,我看不到 Java 正则表达式(由 java.util.regex.Pattern 定义)为此类代码点定义“字符类”的方法,因为代码没有 String 文字BMP 之外的点。

尽管可以编写代码来为此类范围生成正则表达式(好吧,字符串文字用作正则表达式),Pattern 中是否存在未记录的现有机制并允许这样做?

最佳答案

好的,所以, self 回答;从 this question 中提取的数据和相关的 answer哪个@DavidWallace指向。

这是可能的。解释一下答案,在这样的字符类中:

"[\uD83D\uDE01-\uD83D\uDE4F]"

Java 正则表达式引擎会足够聪明,注意到您在区间的两端指定了一个代理项对,并相应地“编译”正则表达式。

此外,从 Java 7 开始,您还可以使用 \x{foo} 其中 foo 是代码的十六进制表示观点。不要忘记 Java 字符串文字中必要的引号,因此可以编写上面的内容:

"[\\x{1F601}-\\x{1F64F}]"

关于java - 使用 Java 正则表达式匹配 BMP : it is possible at all? _外部_的一系列 Unicode 代码点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26897810/

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