这种模式有什么问题?
What's wrong with this pattern?
谁能告诉我这个正则表达式有什么问题
"^[a-zA-Z0-9 -\/_&()']*$"
我希望它只接受像 abc123/-_
这样的值,但我不确定为什么它甚至接受 ABC
但它不接受双引号。
这是我的代码:
public static final Pattern
PATTREN = Pattern.compile("^[a-zA-Z0-9 -\/_&()']*$");
Matcher m = PATTREN .matcher("ABC\"");
return m.matches();
模式是 A-Z,那么您认为它为什么不允许大写字符?
您正在使用 [] 定义字符 class;方括号之间的任何内容都被视为 "valid" 字符。因此,如果您不需要大写字母,请从 [].
中删除 A-Z
顺便说一句:虽然它不支持 Java,但您可能想玩 https://regex101.com/
这是一个很好的 "practice" 正则表达式站点; "convert" 从其他语言到 Java 的正则表达式并不难。
我相信这就是你想要的
唯一需要在 [] 中转义的字符是连字符 - 它具有特殊含义。其他一切都是字面意思,甚至括号、斜杠等通常都有意义。
不需要开始和结束标记
- 您可以在模式中使用 Pattern.CASE_INSENSITIVE 标志,而不是通过 A-Za-z 增加额外的复杂性
代码
例子
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());
谁能告诉我这个正则表达式有什么问题
"^[a-zA-Z0-9 -\/_&()']*$"
我希望它只接受像 abc123/-_
这样的值,但我不确定为什么它甚至接受 ABC
但它不接受双引号。
这是我的代码:
public static final Pattern
PATTREN = Pattern.compile("^[a-zA-Z0-9 -\/_&()']*$");
Matcher m = PATTREN .matcher("ABC\"");
return m.matches();
模式是 A-Z,那么您认为它为什么不允许大写字符?
您正在使用 [] 定义字符 class;方括号之间的任何内容都被视为 "valid" 字符。因此,如果您不需要大写字母,请从 [].
中删除 A-Z顺便说一句:虽然它不支持 Java,但您可能想玩 https://regex101.com/
这是一个很好的 "practice" 正则表达式站点; "convert" 从其他语言到 Java 的正则表达式并不难。
我相信这就是你想要的
唯一需要在 [] 中转义的字符是连字符 - 它具有特殊含义。其他一切都是字面意思,甚至括号、斜杠等通常都有意义。
不需要开始和结束标记
- 您可以在模式中使用 Pattern.CASE_INSENSITIVE 标志,而不是通过 A-Za-z 增加额外的复杂性 代码
例子
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());