Java中的标点正则表达式

首先,我阅读文档如下

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

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

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

你可以在这里使用字符减法

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

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

如果您还计划匹配所有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: ,