Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式在字符类中放置@_Java_Regex - Fatal编程技术网

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

Java正则表达式在字符类中放置@,java,regex,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@resistanc

我使用下面的代码来计算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());

  }

}
但当我将regexp上方的“@”符号移到字符组的末尾时,如

[^A-Za-z0-9/._-@]
,我得到以下异常:

java.util.regex.PatternSyntaxException: Illegal character range near index 15
[^A-Za-z0-9/._-@]
               ^
为什么字符组中“@”字符的位置相关?如果“@”字符在结束“]]之前,正则表达式为什么会导致异常?

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

[^A-Za-z0-9/._\\-@]
在字符类中,可以将连字符作为范围中的第一个最后一个字符。如果将连字符放在其他任何地方,则需要将其转义才能匹配。

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

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

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

问题不在于
@
,而在于连字符(
-

在类(
[]
)中,连字符定义了一个范围,例如
a-z

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


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

问题不在于
@
,而在于连字符(
-

在类(
[]
)中,连字符定义了一个范围,例如
a-z

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


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

-
是字符类中的特殊字符,它表示一个范围

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

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

-
是字符类中的一个特殊字符,它表示一个范围

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

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

谢谢你的帮助。我尝试过转义连字符来修复异常,但是现在所有包含连字符的测试字符串的单元测试都失败了,比如“johnconnor”。我已经尝试了以下两个正则表达式:[^A-Za-z0-9/-/.\u@]和[^A-Za-z0-9/-/.\u@]。不过,针对“john.connor3”等测试字符串的单元测试正在运行。还有什么我遗漏的吗?@rexford我不能从你发布的信息判断,你需要将一些具有这种
模式的单元测试发布到另一个问题中,因为范围不同。另一方面,我建议首先检查大量关于使用正则表达式解析电子邮件地址的文献(一般和非一般)。@rexford,你的评论中有你的转义序列背景词,
[^A-Za-z0-9/\\\\-@]
@hwnd:这是拼图中的最后一块。现在,一切都很好!谢谢你们所有人的帮助和耐心…谢谢你们的帮助。我尝试过转义连字符来修复异常,但是现在所有包含连字符的测试字符串的单元测试都失败了,比如“johnconnor”。我已经尝试了以下两个正则表达式:[^A-Za-z0-9/-/.\u@]和[^A-Za-z0-9/-/.\u@]。不过,针对“john.connor3”等测试字符串的单元测试正在运行。还有什么我遗漏的吗?@rexford我不能从你发布的信息判断,你需要将一些具有这种
模式的单元测试发布到另一个问题中,因为范围不同。另一方面,我建议首先检查大量关于使用正则表达式解析电子邮件地址的文献(一般和非一般)。@rexford,你的评论中有你的转义序列背景词,
[^A-Za-z0-9/\\\\-@]
@hwnd:这是拼图中的最后一块。现在,一切都很好!谢谢大家的帮助和耐心。。。