[英]Punctuation Regex in 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");
}
}
結果不匹配。
有任何不匹配嗎?
謝謝
米茲克
您正在匹配兩個字符,而不是一個。 使用(負)前瞻應該可以解決這個任務:
(?![@',&])\\p{Punct}
您可以在此處使用字符減法:
String pat = "[\\p{Punct}&&[^@',&]]";
整個模式表示一個字符類[...]
,其中包含一個\\p{Punct}
POSIX 字符類、 &&
交集運算符和[^...]
否定字符類。
如果您還計划匹配所有 Unicode 標點符號,則可能需要 Unicode 修飾符:
String pat = "(?U)[\\p{Punct}&&[^@',&]]";
^^^^
該模式匹配除@
、 '
,
和&
之外的任何標點符號(使用\\p{Punct}
)。
如果您需要排除更多字符,請將它們添加到否定字符類中。 請記住始終在 Java 正則表達式字符類/集內轉義-
、 \\
、 ^
、 [
和]
。 例如,添加反斜杠和-
可能看起來像"[\\\\p{Punct}&&[^@',&\\\\\\\\-]]"
或"[\\\\p{Punct}&&[^@',&\\\\-\\\\\\\\]]"
。
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: ,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.