我们在项目中常用到java正则对文本内容进行分析替换,有时虽然只是简单的一行replace代码,却无不用到正则。这里java正则的语法将不再述说,重点说说如何对匹配的内容进行替换操作。  

  这里拿上一篇文章中的自定义标签作为例子来进行说明

  

{xxx:arclist typeid="" sum="" orderasc="" limit="1,2"}
      <a  href=" [xx:url]">[xx:title " ]</a>
    {/xxx:arclist}

 

上面标签假如是个自定义的文章列表标签,很显然对我们有用的条件参数只是 typeid=" "  sum=" " ... ... 到limit=" "这一段,所以我们要将这一段内容拿出来。其次的就是自定义标签对中间的内容,因为我们是要对中间的自定义属性标签进行内容替换的。比如我们这取了十条数据,就要把每一条数据按中间的形式去替换,再把这十条数据放在标签对中间去。准确的说这替换后的十条数据就是我们要想的结果,更该是让这十条数据把整个标签对替换掉。

 

下面是具体代码如何去匹配和替换

String regx = "\\{xxx:arclist([^\\}]*)\\}(.*?)\\{/xxx:arclist \\}";
  Pattern p = Pattern.compile(regx);   
  Matcher m = p.matcher(content);            // content为你要分析的文本内容
  String groupStr = null;                    // 匹配参数条件组
  String groupStr1 = null;                   // 匹配内部属性标签
  String[] paramsStr = null;                 // 获取参数数组
  StringBuffer sb = new StringBuffer();   
  StringBuffer sb_1 = new StringBuffer();   
    
  while(m.find()){   
     // 标签对获取数据,然后条件查询
     groupStr = m.group(1).trim();                       // 去掉首尾空格
     groupStr = groupStr.replaceAll("\\s+"," ");         // 把多个空格替换成一个
     paramsStr = groupStr.split(" ");                    // 以空格分组成一数组
  
      /**
       * 这里的paramsStr 就是己获得的参数,扔给你获取数据的方法去解析并返回想要的结果集 listBean
       */  
    
     // 标签对内部内容
     groupStr1 = m.group(2);   
     String str_1 = "";                                   // 用于一条数据替换后的结果
     Pattern p_1 = Pattern.compile("\\[xx:([^\\]]*\\]");
       for( objectBean bean :listBean){   
             Matcher m_1 = p_1.matcher(groupStr1);   
             while(m_1.find()){   

                /**
                 * 这里把每一个属性标签中应放的值value取出
                 */  

                // 把属性标签替换成相应的数据
                if(value == null){   
                  m_1.appendReplacement(sb_1,"");           
                }else{   
                  m_1.appendReplacement(sb_1,value.toString());   
                }   
             }   
        m_1.appendTail(sb_1);              // 把属性标签替换后放入sb_1中
        str_1 += sb_1;                     // 把一条数据替换后都入str_1中
        sb_1.delete(0, sb_1.length());     // 这里清空内容是为下组标签对准备
   }   
    m.appendReplacement(sb, str_1);   
  }

 

这样我们就己把所要分析的内容己全部分析和替换完成了,sb就是分析和替换全部完成后的内容。