繁体   English   中英

Java正则表达式在字符类中放置@

[英]Java regex placing @ in character classes

我正在使用以下代码来评估Java中的正则表达式,效果很好。

public class RegExTest {

  public RegExTest() {
  }

  public static void main(String[] args) {
      Pattern pattern = Pattern.compile("[^A-Za-z0-9/.@_-]");
      Matcher matcher = pattern.matcher("john.connor3@resistance-aloha.net");
      System.out.println(matcher.find());

  }

}

但是当我将正则表达式上方的“ @”符号移到字符组的末尾时,如下所示:

[^A-Za-z0-9/._-@]

,出现以下异常:

java.util.regex.PatternSyntaxException: Illegal character range near index 15
[^A-Za-z0-9/._-@]
               ^

为什么字符组中'@'字符的位置相关,并且如果'@'字符位于结束']'之前,则正则表达式如何导致异常?

这是因为连字符( - )需要在此处转义。

[^A-Za-z0-9/._\\-@]

在字符类中,可以将连字符作为范围内的第一个最后一个字符。 如果将连字符放置在其他任何地方,都需要对其进行转义以进行匹配。

问题不是@ ,而是连字符( - )。

在类( [] )中,连字符定义一个范围,例如az

在第二种情况下, _@之间的范围当然是无效的,因此是错误的。

如果需要,可以转义连字符来解决此问题: \\\\-

-是字符类中的特殊字符,它指示范围。

因此,您的正则表达式包含无效的_-@范围。 你需要逃避HTE -像这样\\-

"[^A-Za-z0-9/.@_\\-]"

暂无
暂无

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

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