[英]Inconsistent regex character classes in java
Java如何处理收到不一致的regex模式? 我正在尝试:
Pattern p = Pattern.compile("[a-d[m-p][^d][m]]");
Matcher m = p.matcher("d");
System.out.println(m.matches());
为此我得到了真实。 但是,我的角色类包含[^ d],因此根据正则表达式,它不应该是匹配项。 但是由于d也包含在模式( ad )中,因此匹配的结果为正。 那么,如何解析模式? 抛出异常会更好吗?
该行为是正确的并记录在案 :
字符类可以出现在其他字符类中,并且可以由联合运算符(
implicit
)和交集运算符(&&
)组成。
另请参见Java 字符类参考 :
[ad[mp]]
a
到d
或m
到p
:[a-dm-p]
(联合)
因此,模式匹配:
[
-角色类开始 ad
- a
到d
OR [mp]
m
至p
或 [^d]
-不是d
OR [m]
- m
]
-字符类的结尾。 当d
与ad
匹配时,将返回匹配项。
如果要匹配除某些符号以外的一系列符号,则需要减去 :
[a-d[m-p][m]&&[^d]]
此正则表达式将与d
不匹配,因为现在ad
范围已通过&&[^d]
“调整”,并且不再与d
匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.