Java 正则表达式 标签内的内容置空
语法: [\w\W]* 匹配所有字符包括换行符
目标:
场景之一: 使用com.lowagie.text.pdf 导出html到word上面的时候,对于表格的内容无法处理,会报错。要把带表格的标签及其内容去掉。
代码:
public static void main(String[] args) {
String content = "<p>图片导出</p>\n<p> </p>\n<p>啦啦</p>\n<p> </p>\n<p> </p>\n<p><img src=\"F://temp//back1.jpg\" alt=\"\" width=\"640\" height=\"640\" /></p>\n<p> </p>\n<p>发放</p>\n<p> </p>\n<table style=\"border-collapse: collapse; width: 100%;\" border=\"1\">\n<tbody>\n<tr>\n<td style=\"width: 16.6667%;\">大丰收</td>\n<td style=\"width: 16.6667%;\">阿凡达</td>\n<td style=\"width: 16.6667%;\">执行</td>\n<td style=\"width: 16.6667%;\">打算</td>\n<td style=\"width: 16.6667%;\">阿道夫</td>\n<td style=\"width: 16.6667%;\">展旭</td>\n</tr>\n<tr>\n<td style=\"width: 16.6667%;\">安抚</td>\n<td style=\"width: 16.6667%;\">啊</td>\n<td style=\"width: 16.6667%;\">的</td>\n<td style=\"width: 16.6667%;\">大</td>\n<td style=\"width: 16.6667%;\"> 发</td>\n<td style=\"width: 16.6667%;\">发送到</td>\n</tr>\n<tr>\n<td style=\"width: 16.6667%;\">阿道夫</td>\n<td style=\"width: 16.6667%;\">ad</td>\n<td style=\"width: 16.6667%;\">答复</td>\n<td style=\"width: 16.6667%;\">阿斯蒂芬</td>\n<td style=\"width: 16.6667%;\"> 发多少</td>\n<td style=\"width: 16.6667%;\">发的</td>\n</tr>\n<tr>\n<td style=\"width: 16.6667%;\">啊</td>\n<td style=\"width: 16.6667%;\">的</td>\n<td style=\"width: 16.6667%;\">更舒服的</td>\n<td style=\"width: 16.6667%;\">国防生的</td>\n<td style=\"width: 16.6667%;\"> 萨芬的</td>\n<td style=\"width: 16.6667%;\">阿斯蒂芬</td>\n</tr>\n<tr>\n<td style=\"width: 16.6667%;\">啊</td>\n<td style=\"width: 16.6667%;\">是大法官</td>\n<td style=\"width: 16.6667%;\">十多个</td>\n<td style=\"width: 16.6667%;\">杀伐果断</td>\n<td style=\"width: 16.6667%;\">杀伐果断</td>\n<td style=\"width: 16.6667%;\">用复合弓的</td>\n</tr>\n</tbody>\n</table>\n<p> </p>\n<p><img src=\"F://temp//back2.jpg\" alt=\"\" width=\"300\" height=\"108\" /></p>\n<p>第三方</p>\n<p> </p>";
System.out.println("===============");
String repalceStr = matchReplaceWithLabel(content, "table");
System.out.println("repalceStr: "+repalceStr);
}
public static String matchReplaceWithLabel( String content, String label)
{
String pattern = "<"+label+"([\\w\\W]*)" +"</"+label+">";
System.out.println(pattern);
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(content);
StringBuffer sb = new StringBuffer();
while (m.find()) {
String group = m.group();
m.appendReplacement(sb, group == null ? "" : "");
}
m.appendTail(sb);
return sb.toString();
}
结果:
repalceStr: <p>图片导出</p>
<p> </p>
<p>啦啦</p>
<p> </p>
<p> </p>
<p><img src="F://temp//back1.jpg" alt="" width="640" height="640" /></p>
<p> </p>
<p>发放</p>
<p> </p>
<p> </p>
<p><img src="F://temp//back2.jpg" alt="" width="300" height="108" /></p>
<p>第三方</p>
<p> </p>
总结:
这边难的是知道[\w\W]* 匹配所有字符包括换行符这个语法,传对应的标签,这样html里面的,需要置空的内容,都可以处理,或是替换为想要的内容。