java 正则表达式匹配问题?

我想要写匹配如下5种格式字符串的正则表达式:
1.数字
2.数字#
3.数字##
4.数字#*
5.数字#数字

问题:匹配这5中格式字符串的正则表达式,应该怎么写?请大神赐教……

本人尝试使用[0-9]+#|*|[0-9]等匹配方式都不行

    public static boolean checkAccount(String email){
        boolean flag = false;
        try{
            String check = "[0-9]+#|*|[0-9]";
//            String check = "\\d#|*|[0-9]";
            Pattern regex = Pattern.compile(check);
            Matcher matcher = regex.matcher(email);
            flag = matcher.matches();
        }catch(Exception e){
            flag = false;
        }
        return flag;
    }
//    数字+#|##|#*+数字
    public static void main(String[] args) {
        System.out.println(checkAccount("12334#"));
        System.out.println(checkAccount("12334##"));
        System.out.println(checkAccount("12334#*"));
        System.out.println(checkAccount("12334#12367"));
        System.out.println(checkAccount("123123"));
    }
阅读 2.6k
3 个回答

匹配结果看这边

代码:

public static boolean checkAccount(String input){
        return Pattern.matches("^\\d+(?:#?\\d*|#[#*])$", input);
    }

如果是要在一段文本中匹配满足上述规则的字符串, 就用:

\d+(#(#|\*|\d+)?)?

或者, 按照你的习惯, 把 \d 替换为 [0-9]:

[0-9]+(#(#|\*|[0-9]+)?)?

如果是要验证一串字符串是否符合该规则, 就最好是用:

^\d+(#(#|\*|\d+)?)?$

注意 : 以上为纯正则, 如果要用在各个语言中, 记得对部分字符进行转意. 比如 java 中应该对 \ 这个字符进行转意, 应该是这样的:

String check = "^\\d+(#(#|\\*|\\d+)?)?$";

以上正则我已经验证过, 但上面这段 java 并未实测, 不对就再看看哪个字符还需要转意.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进