天天看點

正規表達式 之過濾注釋

正規表達式 之過濾注釋

 如上圖所示,如何去掉注釋呢?

正規表達式 之過濾注釋

@test  

    public void test_deletecommen(){  

        string input="b<!-- step的屬性seq是 從1 開始的正整數 -->a";  

        system.out.println(input.replaceall("<!--[^<>]*-->", ""));  

    }  

 運作結果:

正規表達式 之過濾注釋

 達到預期效果了.

但是

正規表達式 之過濾注釋

        string input="b<!-- >step的屬性seq是 從1 開始的正整數 -->a";  

正規表達式 之過濾注釋

 沒有達到預期的結果,為什麼呢?因為注釋中多了>

如何解決呢?

正規表達式 之過濾注釋

    public void test_deletecomment2(){  

        string regex="<!--"+valuewidget.otherwise22("-->")+"-->";  

        system.out.println(input.replaceall(regex, ""));  

ba

達到預期了.

方法otherwise22 的實作如下:

正規表達式 之過濾注釋

/*** 

     * 不包含 

     * @param regex 

     * @return 

     */  

    public static string otherwise22(string regex){  

        int length=regex.length();//共有length * length種情況  

        string[][] arr2=new string[length][];  

        for(int i=0;i<length;i++){  

            string[] arr3=new string[2];  

            arr3[0]=string.valueof(regex.charat(i));  

//          if(arr3[0].equals("*")){  

//              arr3[0]="\\*";  

//          }  

            arr3[1]="[^"+arr3[0]+"]";  

//          system.out.println(arr3[0]+" "+arr3[1]);  

            arr2[i]=arr3;  

        }  

//      string[]result=new string[2^3];  

//      for(int i=0;i<length;i++){  

//          result[i]=arr2[i][0];  

//      }  

        //   \u4e00-\u9fa5 是為了比對漢字  

        string normal="[\\w\u4e00-\u9fa5\\s\"']*?";  

        list<stringbuffer> list33=assemble(arr2,true);  

        int length22=list33.size();  

        stringbuffer sbu=new stringbuffer("(");  

        for(int i=1;i<length22;i++){  

            sbu.append(normal).append(list33.get(i)).append(normal);  

            if(i!=length22-1){  

                sbu.append("|");  

            }  

        sbu.append(")");  

//      system.out.println(list33);  

        return sbu.tostring();  

     *  

     * @param a 

     * @param aa 

     * @param index : 初始值為0 

    private static list<stringbuffer> cc(string[][] aa,int index,list<stringbuffer> list,boolean isdealregex){  

        if(index>=aa.length){//說明已經周遊完成  

            return list;//并不是每次循環都會執行,最後才會執行此語句.  

        string cc[]=aa[index];  

        int length=cc.length;  

        list<stringbuffer> listnew=new arraylist<stringbuffer>();  

        if(list==null||list.size()==0){//首次循環  

            for(int i=0;i<length;i++){//必須保證順序,是以不能使用 foreach  

                if(isdealregex && cc[i].equals("*")){  

                    cc[i]="\\*";  

                }  

                if(isdealregex){  

                    listnew.add(new stringbuffer(cc[i]+"?"));  

                }else{  

                    listnew.add(new stringbuffer(cc[i]));  

        }else{  

                for(int j=0;j<list.size();j++){//必須保證順序,是以不能使用 foreach  

                    stringbuffer sb=list.get(j);  

                    stringbuffer sb2=new stringbuffer(sb);  

                    if(isdealregex && cc[i].equals("*")){  

                        cc[i]="\\*";  

                    }  

                    if(isdealregex  ){  

                        sb2.append(cc[i]+"?");  

                    }else{  

                        sb2.append(cc[i]);  

                    listnew.add(sb2);  

        list<stringbuffer> list33=cc(aa, ++index, listnew,isdealregex);  

        if(!valuewidget.isnullorempty(list33)){  

            return list33;  

        return null;  

    /*** 

     * 組合 

    public static list<stringbuffer>assemble(string[][] aa,boolean isdealregex){  

        return cc(aa, 0, null,isdealregex);  

 源代碼見附件io0007-find_progess-0.0.8.5-snapshot-sources.jar