java - 模式和匹配器在 Java 中不起作用

标签 java regex

基本上我有一个简单的字符串,我需要在其中明确限制 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/

相关文章:

java - 倾城:无法获得 ru.yandex.qat ools.allure 的报告:allure-maven-plugin

java - IzPack 和辅助功能(使用屏幕阅读器)

Python正则表达式模式定义不包括字符

regex - 如何删除以特定单词开头的句子?

javascript - 正则表达式匹配包含给定一系列字母或数字的所有字符串

用于计算机名称验证的 RegEx(长度不能超过 15 个字符、完全为数字或包含以下字符...)

java - Hibernate JPA @OneToOne 双向在 Spring-Boot 中不起作用

java - jBPM 6 API 调用 REST API 的用法

java - 为什么主函数重载没有冲突?

c# - 如何使用正则表达式从字符串中获取数字?