java - 如何只允许三个字符
问题描述
如果字符串包含除字母 L、M 或 R 以外的任何内容,我需要进行正则表达式检查以失败。
我已经尝试将 L、M 和 R 列入白名单,并将任何不是 L、M 或 R 的东西列入黑名单,或者我想。我可能两者都失败了。
if(Pattern.compile("^[LMR]$").matcher("MMMRMMMRMMLLMMK").matches()){
return false;
}
if(Pattern.compile("[^LMR]").matcher("MMMRMMMRMMLLMMK").matches()){
return false;
}
Pattern pat = Pattern.compile("^LMR]");
Matcher mat = pat.matcher("MMMRMMMRMMLLMMK");
if(pat.matches("[^LMR]", "MMMRMMMRMMLLMMK")){
return false;
}
预期:字符串“MMMRMMMRMMLLMMK”失败。实际:我可以将任何内容放入该匹配器中,它会通过。
解决方案
这个表达式可能很简单:
^[LMR]*$
正则表达式演示
Ideone Java 演示
测试
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
final String regex = "^[LMR]*$";
final String string = "MMMRMMMRMMLLMMK\n"
+ "MMMRMMMRMMLLMM\n"
+ "L\n"
+ "M\n"
+ "R\n";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
该表达式在regex101.com的右上角面板上进行了说明,如果您希望探索/简化/修改它,并且在此链接中,您可以查看它如何与一些示例输入匹配,如果您愿意的话。
推荐阅读
- spring-cloud-contract - 如何使用 Spring Cloud Contract 处理虚拟主题
- javascript - 如何在同一个javascript程序中部署和获取智能合约的地址
- java - while 和 if 语句中的代码无法访问
- html - 修复导航栏折叠位置和宽度调整颜色
- cratedb - 板条箱数据库快照大小
- wso2 - WSO2 API 管理器 - 2..6.0
- angular - ● 测试套件无法运行 Jest 遇到意外的令牌导出 { BsModalRef }
- python - 如何从列表中取出多个元素并将其保留为元组,然后将元组分配为字典的键?
- java - 我可以使用批处理在 jdbc 中执行查询吗?
- android - 如何在 android 的较低 API 级别上使用 Java 8 可选功能