当我使用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'检查它。在一行中连接两个或多个组一定存在问题。 谢谢你的帮助。
答案 0 :(得分:1)
您的正则表达式 - (\d+)[!@#$%^&*()_+=}-]
- 匹配1+位的序列,后跟指定集合中的符号。
如果字符串中存在指定集合中的单个字符,您希望测试字符串并返回true
。
所以,只需将\d
移动到角色类,然后将-
移到此类的末尾:
String pat = "[\\d!@#$%^&*()_+=}-]";
^^^
如果您需要匹配数字或特殊字符,请使用
String pat = "\\d|[!@#$%^&*()_+=}-]";
如果您需要两者而不管订单:
String pat = "^(?=\\D*\\d)(?=[^!@#$%^&*()_+=}-]*[!@#$%^&*()_+=}-])";