正则表达式“\\p{Z}”是什么意思?

2022-09-02 01:24:16

我正在使用Java中的一些代码,这些代码具有如下语句

String tempAttribute = ((String) attributes.get(i)).replaceAll("\\p{Z}","")

我不习惯正则表达式,那么它的含义是什么?(如果你能提供一个网站来学习正则表达式的基础知识,那就太好了)我已经看到过这样的字符串

ept as y它被转换为 ,但这似乎不对。我相信写这篇文章的人想要修剪前导和尾随空间。eptasy


答案 1

它将删除所有空格(将所有空格匹配替换为空字符串)。

regular-expressions.info 提供了一个很棒的正则表达式教程。来自本网站的引用:

\p{Z} 或 \p{分隔符}:任何类型的空格或不可见的分隔符。


答案 2

OP表示代码片段是用Java编写的。要对声明发表评论:

\p{Z} 或 \p{分隔符}:任何类型的空格或不可见的分隔符。

下面的示例代码表明这不适用于 Java。

public static void main(String[] args) {

    // some normal white space characters
    String str = "word1 \t \n \f \r " + '\u000B' + " word2"; 

    // various regex patterns meant to remove ALL white spaces
    String s = str.replaceAll("\\s", "");
    String p = str.replaceAll("\\p{Space}", "");
    String b = str.replaceAll("\\p{Blank}", "");
    String z = str.replaceAll("\\p{Z}", "");

    // \\s removed all white spaces
    System.out.println("s [" + s + "]\n"); 

    // \\p{Space} removed all white spaces
    System.out.println("p [" + p + "]\n"); 

    // \\p{Blank} removed only \t and spaces not \n\f\r
    System.out.println("b [" + b + "]\n"); 

    // \\p{Z} removed only spaces not \t\n\f\r
    System.out.println("z [" + z + "]\n"); 

    // NOTE: \p{Separator} throws a PatternSyntaxException
    try {
        String t = str.replaceAll("\\p{Separator}","");
        System.out.println("t [" + t + "]\n"); // N/A
    } catch ( Exception e ) {
        System.out.println("throws " + e.getClass().getName() + 
                " with message\n" + e.getMessage());
    }

} // public static void main

其输出为:

s [word1word2]

p [word1word2]

b [word1


word2]

z [word1    


word2]

throws java.util.regex.PatternSyntaxException with message
Unknown character property name {Separator} near index 12
\p{Separator}
            ^

这表明在Java中,\\p{Z}只删除了空格,而没有“任何类型的空格或不可见的分隔符”。

这些结果还表明,在 Java 中 ,\p{分隔符} 会抛出一个 PatternSyntaxException。