Java 中的标点符号正则表达式

2022-09-04 06:36:07

首先,我正在阅读文档,如下所示

http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html

我想找到任何标点符号字符,除了@',但我不太明白。

这里是:

public static void main( String[] args )
{       
     // String to be scanned to find the pattern.
     String value = "#`~!#$%^";
     String pattern = "\\p{Punct}[^@',&]";

    // Create a Pattern object
    Pattern r = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);

    // Now create matcher object.
    Matcher m = r.matcher(value);
    if (m.find()) {
       System.out.println("Found value: " + m.groupCount());
    } else {
       System.out.println("NO MATCH");
    }


}

结果为不匹配。
是否存在任何不匹配?

谢谢
MRizq


答案 1

您匹配的是两个字符,而不是一个。使用(负面的)前瞻应该可以解决任务:

(?![@',&])\\p{Punct}

答案 2

您可以在此处使用字符减法

String pat = "[\\p{Punct}&&[^@',&]]";

整个模式表示一个字符类 ,其中包含 POSIX 字符类交集运算符否定字符类[...]\p{Punct}&&[^...]

如果您还计划匹配所有 Unicode 标点符号,则可能需要使用 Unicode 修饰符:

String pat = "(?U)[\\p{Punct}&&[^@',&]]";
              ^^^^

该模式与除 、 和 以外的任何标点符号(带 ) 匹配。\p{Punct}@',&

如果需要排除更多字符,请将其添加到否定字符类中。只要记住总是转义 、 、 和 Java 正则表达式字符类/集。例如,添加一个反斜杠,可能看起来像 或 。-\^[]-"[\\p{Punct}&&[^@',&\\\\-]]""[\\p{Punct}&&[^@',&\\-\\\\]]"

Java 演示

String value = "#`~!#$%^,";
String pattern = "(?U)[\\p{Punct}&&[^@',&]]";
Pattern r = Pattern.compile(pattern);    // Create a Pattern object
Matcher m = r.matcher(value);            // Now create matcher object.
while (m.find()) {
    System.out.println("Found value: " + m.group());
}

输出:

Found value: #
Found value: !
Found value: #
Found value: %
Found value: ,