为了账号安全,请及时绑定邮箱和手机立即绑定

如何只允许三个字符

如何只允许三个字符

qq_遁去的一_1 2023-04-26 17:21:26
如果字符串包含字母 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”失败。实际:我可以在那个匹配器中放入任何东西,它都会通过。
查看完整描述

2 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

这个表达式可能只是工作:

^[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));

            }

        }


    }

}


查看完整回答
反对 回复 2023-04-26
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

我更愿意在这里使用String#matches简单的模式[LMR]*:


String input = "MMMRMMMRMMLLMM";

if (input.matches("[LMR]*")) {

    System.out.println("MATCH");

}

else {

    System.out.println("NO MATCH");

}

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


查看完整回答
反对 回复 2023-04-26
  • 2 回答
  • 0 关注
  • 109 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信