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: ,