Java 如何只允许三个字符

Java 如何只允许三个字符,java,regex,Java,Regex,如果字符串包含字母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()){ r

如果字符串包含字母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;
}
应为:字符串“mmmrmmmmmmllmmk”失败。
实际情况:我可以在匹配器中放入任何内容,它将通过。

此表达式可能只起作用:

^[LMR]*$
试验
import java.util.*;
导入java.lang.*;
导入java.io.*;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
/*只有当类是公共的时,类的名称才必须是“Main”*/
表意文字
{
公共静态void main(字符串[]args)引发java.lang.Exception
{
最终字符串regex=“^[LMR]*$”;
final String String=“mmmrmmmmmmllmmk\n”
+“mmmrmmmmmmllmm\n”
+“L\n”
+“M\n”
+“R\n”;
最终模式=Pattern.compile(regex,Pattern.MULTILINE);
final Matcher Matcher=pattern.Matcher(字符串);
while(matcher.find()){
System.out.println(“完全匹配:+matcher.group(0));

对于(int i=1;i我更愿意在这里使用
String#matches
和简单模式
[LMR]*

String input = "MMMRMMMRMMLLMM";
if (input.matches("[LMR]*")) {
    System.out.println("MATCH");
}
else {
    System.out.println("NO MATCH");
}

请注意,默认情况下,
String#match
假定围绕模式开始和结束锚定,因此我们甚至不需要提供
^
$

while循环被证明是不必要的,但是在这种情况下使用matcher.find()是一种方法。非常感谢!
String input = "MMMRMMMRMMLLMM";
if (input.matches("[LMR]*")) {
    System.out.println("MATCH");
}
else {
    System.out.println("NO MATCH");
}