我有这个正则表达式:
[^0-9!a-zA-z#\\$%&'\\*\\+\\-/=\\?\\^_`\\{\\|\\}~@\\.]+
我正在尝试使用
拆分电子邮件地址[Email]info@emerycommunications.com
但是java中的以下代码:
String fileStr = "[Email]info@emerycommunications.com";
String invalidCharacters = "[^0-9!a-zA-z#\\$%&'\\*\\+\\-/=\\?\\^_`\\{\\|\\}~@\\.]+";
String[] tokens = fileStr.split(invalidCharacters);
for (String token:tokens) {
if (token.contains("@")) {
System.out.println(token);
}
}
正在提供此输出:
[Email]info@emerycommunications.com
我完全不知道invalidCharacters
变量涵盖[
和]
。
答案 0 :(得分:7)
您的角色类中有A-z
,方括号字符以ASCII(和Unicode)顺序排列在大写字母Z和小写字母a之间。因此,]
被视为有效而非无效的字符 - 可能您的意思是A-Z
。
答案 1 :(得分:4)
这个正则表达式:
[^0-9!a-zA-z#\$%&'\*\+\-/=\?\^_`\{\|\}~@\.]+
匹配至少一个但与任何字符一样多的字符除了之间的方括号。方括号本身不是字符集的一部分。大多数反斜杠都是不必要的;除了连字符之外,没有任何反斜杠字符在字符类中是特殊的。
但是,由于您的范围为A-z
,大写 A
至小写 z
,您不仅可以在那里有两次小写字母,但你也有Z
和a
之间的所有字符,即[
,\
,]
,{ {1}},^
和_
。这就是括号进入否定字符类的方式。
如果这不是你想要的,这个正则表达式可能就是你想要的:
`
(将连字符移到末尾意味着它不需要被反斜杠)