java正则对内容进展分析替换
java正则对内容进行分析替换
我们在项目中常用到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就是分析和替换全部完成后的内容。