程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了未公开的Java正则表达式字符类:\ p {C}大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决未公开的Java正则表达式字符类:\ p {C}?

开发过程中遇到未公开的Java正则表达式字符类:\ p {C}的问题如何解决?下面主要结合日常开发的经验,给出你关于未公开的Java正则表达式字符类:\ p {C}的解决方法建议,希望对你解决未公开的Java正则表达式字符类:\ p {C}有所启发或帮助;

隐藏在Unicode支持下的Pattern文档中,我们发现以下内容:

从Unicode技术标准#18中,我们发现已将C其定义为与任何其他General_category值匹配,并且对此值的支持是对1级一致性的要求的一部分。Java\p{C}之所以实现,是因为它声称符合UTS#18的级别1。

它可能 应该 支持\p{Other},但显然不支持。

更糟糕的是,这违反了1级一致性所要求的RL1.7,这要求匹配是通过代码点而不是代码单元进行的:

不应该有任何的比赛\p{C}在您的测试字符串,因为您的测试字符串应与General_category =所以,(其它符号)一个表情符码点进行匹配,而不是作为两个代理人。

解决方法

在Java项目中发现了一个有趣的正则表达式: "[\\p{C}&&\\S]"

我知道方法的&&意思是“设置交集”,并且\S是“非空白”,但是 什么是\p{C},可以使用吗?

该java.util.regex.Pattern中的文件没有提到它。列表上唯一类似的类是\p{Cntrl}但是它们的行为有所不同:它们都在控制字符上\p{C}匹配,但在U
+ FFFF以上的Unicode字符上匹配 两次 ,例如PILE OF POO

public class StrangePattern {
    public static void main(String[] argv) {

        // As far as I can tell,this is the simplest way to create a String
        // with code points above U+FFFF.
        String poo = new String(Character.toChars(0x1F4A9));

        System.out.println(poo);  // prints `
javajava
标签:p