本来虽然也看过一些正则表达式的用法/ 但是对于有些需求还是不知道从何下手。
现在工作中,遇到一个问题,求一正则表达式!需求:
010003000000000对于上面的一个字符窜,每3个 0 为一组, 从后面往前开始遍历,直到发现 某一组的3个数里面有一个不是0,那么遍历结束,返回这一组以前的所有数字对于上例,去掉 最后3组最后9个0之后, 结果为 010003另外再举个例子
000010003000000000, 去掉 最后3组最后9个0之后, 结果为 000010003最后, 其实对于到底每几个 0  为一组,最好还可以随意设置,比如,我可以要 4个0 为一组,可以要5个零为一组。
这样的正则表示式怎么写? 有没有人能给个答案,不甚感激!

解决方案 »

  1.   

    lz试试这个吧,看看是否符合你的要求import java.util.regex.Pattern;
    import java.util.regex.Matcher;public class Test
    {
    public String subtail(String str,int parm){
    int len = str.length();
    String regex = "[0]{"+parm+"}";
    if(len<=parm){
    return str;
    }
    boolean b = false;
    do{
    if(len<=parm){
    return str;
    }
    String temp = str.substring((len-parm));
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(temp);
    b = m.matches();
    String what = Boolean.valueOf(b).toString();
    if("true".equals(what)){
    len = len - parm;
    str = str.substring(0,len);
    }else{
    return str;
    }
    }while(b);
    return str;
    }
    public static void main(String[] args){
    Test t = new Test();
    String result = t.subtail("020",5);
    System.out.println(result);
    }
    };
      

  2.   

    /*
    ((0{"+N+"})*)$
    */
    public class Pattern2
    {
    public static void main(String[] args)
    {
    String str = "010003000000000";
    final int N = 3;
    String str2 = str.replaceAll("((0{"+N+"})*)$","");
    System.out.println(str2);
    }
    }
      

  3.   

    to lyhk21:
       为啥我运行你那正则的时候,抛运行期的异常--PatternSyntaxException啊?
      

  4.   

    你在试一试下面这个,可能是你插入了不合法的符号.如果字符串全为0,道理一样呀,只是返回m个0,m<N
    public class Pattern2
    {
    public static void main(String[] args)
    {
    String str = "010003000000000";
    final int N = 3;
    String str2 = str.replaceAll("((0{"+N+"})*)$","");
    System.out.println(str2);
    }
    }
      

  5.   

    问,如果字符串全为0希望如何处理?=================
    这个case不需要考虑,业务可以保证不会全0
      

  6.   

    lyhk21 似乎有问题啊,没有效果的拉你测试过没有?
      

  7.   

    TO TYRO729
    "((0{ "+N+ "})*)$ "
         ^           ^
    有两个空格,删掉就好
      

  8.   

    to lyhk21:
       问题找到了,直接从这copy下去的正则里面有空格
        改成((0{"+N+"})*)$就没问题了还有那个数字最后一位也是空格,所以匹配的时候也没成功,哈哈to lz:
       lyhk21的那个式子好用,哈哈
      

  9.   

    lyhk21  的写法是正确的,刚才是个是问题
      

  10.   

    /*
    我知道怎么回事了,没有"禁用UBB",导致网页自动帮我添加了空格
    */
    public class Pattern2
    {
    public static void main(String[] args)
    {
    String str = "010003000000000";
    final int N = 3;
    String str2 = str.replaceAll("((0{"+N+"})*)$","");
    System.out.println(str2);
    }
    }
      

  11.   

    晕,刚才用的是FireFox,不能插入Java Code,再试一次public class Pattern2
    {
    public static void main(String[] args)
    {
    String str = "010003000000000";
    final int N = 3;
    String str2 = str.replaceAll("((0{"+N+"})*)$","");
    System.out.println(str2);
    }
    }
      

  12.   

    晕,刚才用的是FireFox,不能插入Java Code,再试一次
    public class Pattern2
    {
    public static void main(String[] args)
    {
    String str = "010003000000000";
    final int N = 3;
    String str2 = str.replaceAll("((0{"+N+"})*)$","");
    System.out.println(str2);
    }
    }
      

  13.   

    哈哈,lyhk21你就忍了吧,新论坛总是有惊喜的,哈哈,我paste的你那个正则也没空格的,结果上来一看还是有
      

  14.   


    晕,刚才用的是FireFox,不能插入Java Code,再试一次[code=Java]
    public class Pattern2
    {
    public static void main(String[] args)
    {
    String str = "010003000000000";
    final int N = 3;
    String str2 = str.replaceAll("((0{"+N+"})*)$","");
    System.out.println(str2);
    }
    }
      

  15.   

    TYRO729  小单  同样表示感谢我的msn: [email protected]