任何人都可以告诉我这个正则表达式的错误
"^[a-zA-Z0-9 -\\/_&()']*$"
我希望这只接受abc123/-_
&s等值,但我不确定为什么它甚至接受ABC
但是它不接受双引号。
这是我的代码:
public static final Pattern
PATTREN = Pattern.compile("^[a-zA-Z0-9 -\\/_&()']*$");
Matcher m = PATTREN .matcher("ABC\"");
return m.matches();
答案 0 :(得分:0)
模式说,A-Z,那为什么你认为它不允许大写字符?
您正在使用[]定义一个字符类;方括号之间的任何东西都被视为“有效”字符。因此,如果您不想要大写字母,请从[]中删除A-Z。
顺便说一句:虽然它不支持Java,但您可能想要使用https://regex101.com/
这是一个“练习”正则表达式的好网站;并且很难将正则表达式从其他语言“转换”为Java。
答案 1 :(得分:0)
我相信这就是你想要的
只有在[]内需要转义的字符才是连字符 - 它具有特殊含义。其他一切都是字面的,甚至括号,斜线等通常都有意义。
无需开始和结束标记
实施例
Pattern pattern = Pattern.compile("[a-z0-9\\-/_&()']*", Pattern.CASE_INSENSITIVE);
System.out.println(pattern.matcher("abc123/-_'s").matches());
System.out.println(pattern.matcher("ABC\"").matches());