是否可以减去字符类中的匹配字符?模式:如何减少字符类中的匹配字符?
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