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