鍍金池/ 問答/Java/ java 正則表達(dá)式匹配問題?

java 正則表達(dá)式匹配問題?

我想要寫匹配如下5種格式字符串的正則表達(dá)式:
1.數(shù)字
2.數(shù)字#
3.數(shù)字##
4.數(shù)字#*
5.數(shù)字#數(shù)字

問題:匹配這5中格式字符串的正則表達(dá)式,應(yīng)該怎么寫?請大神賜教……

本人嘗試使用[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;
    }
//    數(shù)字+#|##|#*+數(shù)字
    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"));
    }
回答
編輯回答
默念

匹配結(jié)果看這邊

代碼:

public static boolean checkAccount(String input){
        return Pattern.matches("^\\d+(?:#?\\d*|#[#*])$", input);
    }
2017年4月27日 17:47
編輯回答
尕筱澄

如果是要在一段文本中匹配滿足上述規(guī)則的字符串, 就用:

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

或者, 按照你的習(xí)慣, 把 \d 替換為 [0-9]:

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

如果是要驗證一串字符串是否符合該規(guī)則, 就最好是用:

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

注意 : 以上為純正則, 如果要用在各個語言中, 記得對部分字符進(jìn)行轉(zhuǎn)意. 比如 java 中應(yīng)該對 \ 這個字符進(jìn)行轉(zhuǎn)意, 應(yīng)該是這樣的:

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

以上正則我已經(jīng)驗證過, 但上面這段 java 并未實測, 不對就再看看哪個字符還需要轉(zhuǎn)意.

2017年1月25日 13:35
編輯回答
命多硬
^\d+(#([*#]|\d+))?$
2017年1月11日 04:53