正则表达式 之过滤注释

使用Java 正则表达式如何过滤掉注释呢?
正则表达式 之过滤注释_第1张图片
 如上图所示,如何去掉注释呢?

Java代码   收藏代码
  1. @Test  
  2.     public void test_deleteCommen(){  
  3.         String input="ba";  
  4.         System.out.println(input.replaceAll(""""));  
  5.     }  

 运行结果:

 达到预期效果了.

但是

Java代码   收藏代码
  1. @Test  
  2.     public void test_deleteCommen(){  
  3.         String input="ba";  
  4.         System.out.println(input.replaceAll(""""));  
  5.     }  

 运行结果:

 没有达到预期的结果,为什么呢?因为注释中多了>

如何解决呢?

 

Java代码   收藏代码
  1. @Test  
  2.     public void test_deleteComment2(){  
  3.         String input="ba";  
  4.         String regex="")+"-->";  
  5.         System.out.println(input.replaceAll(regex, ""));  
  6.     }  

 运行结果:

ba

达到预期了.

方法otherwise22 的实现如下:

Java代码   收藏代码
  1. /*** 
  2.      * 不包含 
  3.      * @param regex 
  4.      * @return 
  5.      */  
  6.     public static String otherwise22(String regex){  
  7.         int length=regex.length();//共有length * length种情况  
  8.         String[][] arr2=new String[length][];  
  9.         for(int i=0;i
  10.             String[] arr3=new String[2];  
  11.             arr3[0]=String.valueOf(regex.charAt(i));  
  12. //          if(arr3[0].equals("*")){  
  13. //              arr3[0]="\\*";  
  14. //          }  
  15.             arr3[1]="[^"+arr3[0]+"]";  
  16. //          System.out.println(arr3[0]+" "+arr3[1]);  
  17.             arr2[i]=arr3;  
  18.         }  
  19. //      String[]result=new String[2^3];  
  20. //      for(int i=0;i  
  21. //          result[i]=arr2[i][0];  
  22. //      }  
  23.         //   \u4E00-\u9FA5 是为了匹配汉字  
  24.         String normal="[\\w\u4E00-\u9FA5\\s\"']*?";  
  25.         List list33=assemble(arr2,true);  
  26.         int length22=list33.size();  
  27.         StringBuffer sbu=new StringBuffer("(");  
  28.         for(int i=1;i
  29.             sbu.append(normal).append(list33.get(i)).append(normal);  
  30.             if(i!=length22-1){  
  31.                 sbu.append("|");  
  32.             }  
  33.         }  
  34.         sbu.append(")");  
  35. //      System.out.println(list33);  
  36.           
  37.         return sbu.toString();  
  38.           
  39.     }  
  40.   
  41. /*** 
  42.      *  
  43.      * @param a 
  44.      * @param aa 
  45.      * @param index : 初始值为0 
  46.      */  
  47.     private static List cc(String[][] aa,int index,List list,boolean isDealRegex){  
  48.           
  49.         if(index>=aa.length){//说明已经遍历完成  
  50.             return list;//并不是每次循环都会执行,最后才会执行此语句.  
  51.         }  
  52.         String cc[]=aa[index];  
  53.         int length=cc.length;  
  54.         List listNew=new ArrayList();  
  55.         if(list==null||list.size()==0){//首次循环  
  56.             for(int i=0;i//必须保证顺序,所以不能使用 foreach  
  57.                 if(isDealRegex && cc[i].equals("*")){  
  58.                     cc[i]="\\*";  
  59.                 }  
  60.                 if(isDealRegex){  
  61.                     listNew.add(new StringBuffer(cc[i]+"?"));  
  62.                 }else{  
  63.                     listNew.add(new StringBuffer(cc[i]));  
  64.                 }  
  65.                   
  66.             }  
  67.         }else{  
  68.             for(int i=0;i//必须保证顺序,所以不能使用 foreach  
  69.                 for(int j=0;j//必须保证顺序,所以不能使用 foreach  
  70.                     StringBuffer sb=list.get(j);  
  71.                     StringBuffer sb2=new StringBuffer(sb);  
  72.                     if(isDealRegex && cc[i].equals("*")){  
  73.                         cc[i]="\\*";  
  74.                     }  
  75.                     if(isDealRegex  ){  
  76.                         sb2.append(cc[i]+"?");  
  77.                     }else{  
  78.                         sb2.append(cc[i]);  
  79.                     }  
  80.                     listNew.add(sb2);  
  81.                 }  
  82.             }  
  83.         }  
  84.         List list33=cc(aa, ++index, listNew,isDealRegex);  
  85.         if(!ValueWidget.isNullOrEmpty(list33)){  
  86.             return list33;  
  87.         }  
  88.         return null;  
  89.     }  
  90.     /*** 
  91.      * 组合 
  92.      * @param aa 
  93.      * @return 
  94.      */  
  95.     public static Listassemble(String[][] aa,boolean isDealRegex){  
  96.         return cc(aa, 0null,isDealRegex);  
  97.     }  

 

 源代码见附件io0007-find_progess-0.0.8.5-SNAPSHOT-sources.jar

  

你可能感兴趣的:(正则表达式 之过滤注释)