基本上我有一个简单的字符串,我需要在其中明确限制 a-zA-Z0-9
以外的字符。在我提到这里有什么问题之前,我是怎么做的。
Pattern p = Pattern.compile("[&=]");
Matcher m = p.matcher("Nothing is wrong");
if (m.find()){
out.print("You are not allowed to have &=.");
return;
}
Pattern p1 = Pattern.compile("[a-zA-Z0-9]");
Matcher m1 = p1.matcher("Itissupposetobeworking");
if (m1.find()){
out.print("There is something wrong.");
return;
}
第一个工作正常,但在第二个匹配器上 m1
总是执行 if(m1.find())
即使它不包含任何字符除了模式中指定的以外。
我也试过 Pattern p1 = Pattern.compile("[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]")
但还是有同样的问题。
如果您想知道,String.matches(["a-zA-Z0-9"]);
和我上面使用的方式哪个更好?
提前致谢。
最佳答案
[a-zA-Z0-9]
尝试匹配字母数字字符。
所以,你会得到“有问题”。打印,如果在 matcher()
的输入字符序列中有字母数字字符。
将其更改为 [^a-zA-Z0-9]
并尝试。
这会尝试匹配非字母数字字符。因此,您将获得预期的结果。
关于java - 模式和匹配器在 Java 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40505949/