正则表达式 之过滤注释

简介:

使用Java 正则表达式如何过滤掉注释呢?

 如上图所示,如何去掉注释呢?

Java代码   收藏代码
  1. @Test  
  2.     public void test_deleteCommen(){  
  3.         String input="b<!-- step的属性seq是 从1 开始的正整数 -->a";  
  4.         System.out.println(input.replaceAll("<!--[^<>]*-->"""));  
  5.     }  

 运行结果:

 达到预期效果了.

但是

Java代码   收藏代码
  1. @Test  
  2.     public void test_deleteCommen(){  
  3.         String input="b<!-- >step的属性seq是 从1 开始的正整数 -->a";  
  4.         System.out.println(input.replaceAll("<!--[^<>]*-->"""));  
  5.     }  

 运行结果:

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

如何解决呢?

 

Java代码   收藏代码
  1. @Test  
  2.     public void test_deleteComment2(){  
  3.         String input="b<!-- >step的属性seq是 从1 开始的正整数 -->a";  
  4.         String regex="<!--"+ValueWidget.otherwise22("-->")+"-->";  
  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<length;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<length;i++){  
  21. //          result[i]=arr2[i][0];  
  22. //      }  
  23.         //   \u4E00-\u9FA5 是为了匹配汉字  
  24.         String normal="[\\w\u4E00-\u9FA5\\s\"']*?";  
  25.         List<StringBuffer> list33=assemble(arr2,true);  
  26.         int length22=list33.size();  
  27.         StringBuffer sbu=new StringBuffer("(");  
  28.         for(int i=1;i<length22;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<StringBuffer> cc(String[][] aa,int index,List<StringBuffer> 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<StringBuffer> listNew=new ArrayList<StringBuffer>();  
  55.         if(list==null||list.size()==0){//首次循环  
  56.             for(int i=0;i<length;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<length;i++){//必须保证顺序,所以不能使用 foreach  
  69.                 for(int j=0;j<list.size();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<StringBuffer> 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 List<StringBuffer>assemble(String[][] aa,boolean isDealRegex){  
  96.         return cc(aa, 0null,isDealRegex);  
  97.     }  

 

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

  

相关文章
|
Java 移动开发
java正则表达式移除网页中注释代码
/** * 移除网页中注释掉的代码 * * @param str * @return */ public static String removedisablecode(String str) { Pattern pattern = Pattern.
1238 0
|
Java Linux Windows
正则表达式 删除 Java 代码中的注释
想如何删掉所有java 或xml 中的注释,还在寻找eclipse 中的快捷键了吗,你out了,现在都用正则表达式了、 首先我们了解java 中的注释无非3种: // 单行注释 /* */ 多行注释 /** */ 文档注释 我们可以使用 Ctrl+F 中替换方式来解决,把注释都替换为为空,这样就解决了删除注释的目的。
2965 0
|
JavaScript 前端开发 Java
《正则表达式经典实例(第2版)》——2.18 向正则表达式中添加注释
打开宽松排列模式会产生两个效果。首先,它会把位于字符组之外的井号(#)转变成一个元字符。井号会作为一个注释的开始,该注释的结尾是一行的结束或者该正则表达式的结束(取二者中先到的那个)。井号以及其后的所有内容都会被正则表达式引擎直接忽略。
2210 0
|
Java Android开发 移动开发
java替换注释正则表达式
由于软件要求去掉注释,写了两个个正则表达式 去掉/**/(eclipse)----------------/\*(.|[\r\n])*?\*/去掉//(eclipse)------------------ //.
613 0
|
Java Android开发 移动开发
java替换注释正则表达式
由于软件要求去掉注释,写了两个个正则表达式 去掉/**/(eclipse)----------------/\*(.|[\r\n])*?\*/去掉//(eclipse)------------------ //.
580 0
|
5月前
|
Python
Python 内置正则表达式库re的使用
正则表达式是记录文本规则的代码,用于查找和处理符合特定规则的字符串。在Python中,常通过原生字符串`r&#39;string&#39;`表示。使用`re.compile()`创建正则对象,便于多次使用。匹配字符串有`match()`(从开头匹配)、`search()`(搜索首个匹配)和`findall()`(找所有匹配)。替换字符串用`sub()`,分割字符串则用`split()`。
61 3
|
4月前
|
数据库 Python
Python网络数据抓取(8):正则表达式
Python网络数据抓取(8):正则表达式
41 2
|
4月前
|
自然语言处理 JavaScript 前端开发
Python高级语法与正则表达式(二)
正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
|
4月前
|
安全 算法 Python
Python高级语法与正则表达式(一)
Python提供了 with 语句的写法,既简单又安全。 文件操作的时候使用with语句可以自动调用关闭文件操作,即使出现异常也会自动关闭文件操作。
|
4月前
|
Python
Python使用正则表达式分割字符串
在Python中,你可以使用re模块的split()函数来根据正则表达式分割字符串。这个函数的工作原理类似于Python内置的str.split()方法,但它允许你使用正则表达式作为分隔符。