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