我做练习Java的正则表达式时,对于非一个字符串的解决方法始终没有找到相应的表达式规则。我的应用情况是这样的:使用编码来区分不同的部门,比如一个部门的编码为63100,我现在要匹配非这个部门的其它部门,这个正则表达式怎样来写?我试了[^6][^3][^1].*,这个只能匹配前3位中不出现631的情况,但是象63200这个就没法匹配,不符合要求。我要的是只要前3位不等于631即可。各位高手请支招?

解决方案 »

  1.   

    String departmentCode="63100";
    if(!departmentCode.startsWith("631"))

      //部门编码不是以631开头的
    }
      

  2.   

    楼主的思维应该开阔一点阿,这一题也可以用正则表达式例子如下:
    import java.util.regex.*;class TestPattern
    {
    public static void main(String[] args)
    {
    Pattern p = Pattern.compile("[\\w]+@[\\w]+\\.[\\w]+");
    Matcher m = p.matcher("ssew_r@df_s.c_o_m");
    Pattern p2 = Pattern.compile("[6][3][1][\\d]*");
    Matcher m2 = p2.matcher("63200"); if(!m2.matches())
    {
    System.out.print("ok");
    }
    else
    {
    System.out.print("false");
    }
    }
    }显示结果为ok
      

  3.   

    上面的例子打多了,请看这个
    import java.util.regex.*;class TestPattern
    {
    public static void main(String[] args)
    {
    Pattern p2 = Pattern.compile("[6][3][1][\\d]*");
    Matcher m2 = p2.matcher("63200"); if(!m2.matches())
    {
    System.out.print("ok");
    }
    else
    {
    System.out.print("false");
    }
    }
    }
      

  4.   

    to Hypercube1024() :感谢你的方案。关键问题是这个模式匹配的过程是统一的方法来处理,模式也是动态维护的,我事先并不知道这些信息,所以只能按照用户设置的模式来统一处理。因此就出现了上面的这个问题-咋样通过模式来达到这个效果。欢迎大家继续讨论。
      

  5.   

    既然LZ要练,我出个题目吧:
    像这样的字符串,"2as45df1df2adf125fdf3",既有数字也有字母的,希望将它变成这样的一个串:
    被字母隔开的数字符号如果不足两位的话在它前面补一个"0",如本例应该输出:
    "02as45df01df02adf125fdf03"能否用正则表达式来做到?