在字符类中,是否有可能减去一个匹配的字符?
Java文档有关于字符类减法的示例:
[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");
有没有其他的方法来写这种模式?
ifs
... - Laimoncijus