Java正则表达式将@放入字符类中

标签 java regex

我使用以下代码来计算 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-z

在您的第二个实例中,_@ 之间的范围当然是无效的,因此会出现错误。

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

关于Java正则表达式将@放入字符类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23935303/

相关文章:

java - 没有在类中定义具有 3 个参数的构造函数?

java - Postgresql LIKE for Integer

java - Firebase 搜索无法显示结果

java - 如何在 spring-batch 中计算 Tasket 中的项目?

javascript - 多行匹配排除部分字符的正则表达式

php - 根据模式解析字符串

Java Scanner nextLine 问题,需要额外输入

php - 将逗号(,)替换为点(.)RegEx php

c# - Regex.IsMatch() 无法识别转义序列?

php - 将链接转换为超链接,但第一个链接转换所有其他链接