Matcher无法识别java中的第二组正则表达式

时间:2016-06-17 11:57:27

标签: java regex

当我使用Matcher从正则表达式组中查找符号时,我遇到了问题,它无法识别第二组。可能下面的代码清楚说明:

public void set(String n){
String pat = "(\\d+)[!@#$%^&*()_+-=}]";
Pattern r;
r = Pattern.compile(pat);
System.out.println(r);
Matcher m;
m = r.matcher(n);
if (m.find()) {
     JOptionPane.showMessageDialog(null, 
              "Not a correct form", "ERROR_NAME_MATCH", 0);
}else{
     name = n;
}
}

运行代码后,第一组是可识别的,但第二组[!@#$%^& *()_ + - =}]不是。我完全确定表达式是真的我是用'RegexBuddy'检查它。在一行中连接两个或多个组一定存在问题。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您的正则表达式 - (\d+)[!@#$%^&*()_+=}-] - 匹配1+位的序列,后跟指定集合中的符号。

如果字符串中存在指定集合中的单个字符,您希望测试字符串并返回true

所以,只需将\d移动到角色类,然后将-移到此类的末尾:

String pat = "[\\d!@#$%^&*()_+=}-]";
               ^^^ 

如果您需要匹配数字或特殊字符,请使用

String pat = "\\d|[!@#$%^&*()_+=}-]";

如果您需要两者而不管订单:

String pat = "^(?=\\D*\\d)(?=[^!@#$%^&*()_+=}-]*[!@#$%^&*()_+=}-])";