是否可以減去字符類中的匹配字符?模式:如何減少字符類中的匹配字符?
Java docs都具有約字符類的例子與減法:
[a-z&&[^bc]] - a through z, except for b and c: [ad-z] (subtraction)
[a-z&&[^m-p]] - a through z, and not m through p: [a-lq-z](subtraction)
我想要寫圖案,該圖案匹配兩個雙字字符,當對不是相同的:
1) "aaaa123" - should NOT match
2) "aabb123" - should match "aabb" part
3) "aa--123" - should NOT match
我用以下模式接近成功:
([\w])\1([\w])\2
,但當然它不適用於情況1,所以我需要減去第一組的匹配。但是,當我嘗試這樣做:
Pattern p = Pattern.compile("([\\w])\\1([\\w&&[^\\1]])\\2");
我得到一個異常:
Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 17
([\w])\1([\w&&[^\1]])\2
^
at java.util.regex.Pattern.error(Pattern.java:1713)
如此看來它不與團體工作,但只是列出具體的字符。以下模式編譯沒有問題:
Pattern p = Pattern.compile("([\\w])\\1([\\w&&[^a]])\\2");
是否有任何其他方式來編寫此類模式?
正則表達式確實讓一個看起來很酷:HTTP:// XKCD。com @ 208 @ – flesk 2012-02-07 10:03:15
@Kilian:這個模式只是用於匹配字符串部分的許多(也有很多簡單的)模式之一 - 所以這不僅僅是因爲你說的「酷」 - 系統遍歷模式並匹配它們。 ..如果我會用你建議的方式去 - 我會讓它更「不冷酷」的解決方案,因爲我需要爲一個或另一個案例添加自定義的'ifs' ... – Laimoncijus 2012-02-07 10:03:34
@flesk:非常好,從我+1 ! :) – Laimoncijus 2012-02-07 10:04:38