繁体   English   中英

Java中不一致的正则表达式字符类

[英]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]] ad mp[a-dm-p] (联合)

因此,模式匹配:

  • [ -角色类开始
  • ad - ad OR
  • [mp] mp
  • [^d] -不是d OR
  • [m] - m
  • ] -字符类的结尾。

dad匹配时,将返回匹配项。

如果要匹配某些符号以外的一系列符号,则需要减去

[a-d[m-p][m]&&[^d]]

此正则表达式将与d不匹配,因为现在ad范围已通过&&[^d] “调整”,并且不再与d匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM