iteye_9734 2012-03-07 16:58
浏览 318
已采纳

正则表达式判断一个二位数是否在01-29之间

题目要求:

 

判断一个数是否在01-29之间,我想用正则来写。内容如下:

 

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    public static void main(String args[]){
        p1();
        p2();
    }
    public static void p1(){
        Pattern p = Pattern.compile("[01-29]");
        Matcher m = p.matcher("21");
        boolean b = m.matches();
        System.out.println(b);//输出false
    }
    public static void p2(){
        Pattern p = Pattern.compile("[a-z]");
        Matcher m = p.matcher("b");
        boolean b = m.matches();
        System.out.println(b);//输出为true
    }
}

p2方法输出为 true , 我能理解。

p1方法输出为 false, 我有点糊涂。求教各位大侠。

 

如果想用正则判断一个数字在01-29之间应该怎么写?

 

  • 写回答

10条回答 默认 最新

  • oxcow 2012-03-07 20:48
    关注

    [quote]Pattern p = Pattern.compile("[01-29]"); [/quote]

    这个只能匹配 0或1或2或9 其他均不能匹配。方括号里的代表或者关系,里面的-代表从1到2,所以你这个正则其实是 0|[1-2]|9 .

    如果你想匹配的是 01-29 也就是都是两位的那么使用[code="java"]Pattern p = Pattern.compile("[0-2][1-9]|(?:[1-2]0)");[/code]

    如果你想匹配的是1-29 那么使用[code="java"]Pattern p = Pattern.compile("[1-9]|(?:[1-2][0-9])");[/code]

    如果你想匹配 1-29 也包括01-09 那么使用[code="java"]Pattern p = Pattern.compile("(?:0?[1-9])|(?:[1-2][0-9])")[/code]

    注意以上的正则表达式里 ?:可以去掉 ?:在这里代表不记录捕获组(具体什么是捕获组织自己谷歌下)。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(9条)

报告相同问题?