猿问

如何只允许三个字符

如果字符串包含字母 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”失败。实际:我可以在那个匹配器中放入任何东西,它都会通过。


qq_遁去的一_1
浏览 110回答 2
2回答

三国纷争

这个表达式可能只是工作:^[LMR]*$测试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));            }        }    }}

慕盖茨4494581

我更愿意在这里使用String#matches简单的模式[LMR]*:String input = "MMMRMMMRMMLLMM";if (input.matches("[LMR]*")) {&nbsp; &nbsp; System.out.println("MATCH");}else {&nbsp; &nbsp; System.out.println("NO MATCH");}请注意,String#match默认情况下假定围绕模式开始和结束锚点,因此我们甚至不需要提供^and $。
随时随地看视频慕课网APP

相关分类

Java
我要回答