在新闻管理系统中,通常删除一条新闻信息时,上传到后台指定目录中的图片难以删除。本文采在删除新闻内容时,用正则表达式在新闻内容信息中检测图片标记,并从中提取图片文件所在的路径,建立File文件对象进行删除。从而实现在删除新闻内容时删除相应的图片信息。
package newsMag;
import java.util.regex.*;
import java.util.*;
import java.io.*;
public class DelImg{
public static int delImagesFile(String path,String description) {
// img 的正则表达式:匹配<img>标签
String imgPattern = "<\\s*img\\s+([^>]+)\\s*>";
Pattern pattern1 = Pattern.compile(imgPattern, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern1.matcher(description);
// img src元素的正则表达式:匹配img标签内的src属性
String srcPattern = "\\s*src\\s*=\\s*\"([^\"]+)\\s*\"";
Pattern pattern2 = Pattern.compile(srcPattern, Pattern.CASE_INSENSITIVE);
File f2;//存放删除文件;
int counter=0;//计数删除文件数
while (matcher.find()) {
//group()返回符合表达式的内容
Matcher matcher2 = pattern2 .matcher(matcher.group());
// 一定要find(),这是实际的匹配动作
if (matcher2.find()) {
String src = matcher2.group();
String str;
// System.out.println("shi"+src);
int i2 = src.lastIndexOf('/');
int i1 = src.indexOf("http");
if (i1 == -1) {
str=src.substring(src.indexOf("attached"), src.lastIndexOf('"'));
f2=new File(path+str);
//out.print(path+images.get(i));
//out.print(f2.getAbsolutePath());
if(f2.isFile()) {
f2.delete();
counter++;
}
}
}
}
return counter;
}
public static void main(String[] args) throws Exception {
// 生成一个Pattern,同时编译一个正则表达式
Pattern p = Pattern.compile("[/]+");
//用Pattern的split()方法把字符串按"/"分割
String[] result = p.split(
"Kevin has seen《LEON》seveal times,because it is a good film."
+"/ 凯文已经看过《这个杀手不太冷》几次了,因为它是一部"
+"好电影。/名词:凯文。");
for (int i=0; i<result.length; i++)
System.out.println(result[i]);
String shtmlText="<img border=\"0\" alt=\"\" src=\"/3ds/attached/20110421/20110421141931_455.jpg\" /> cvgdfhc<img border=\"0\" alt=\"\" src=\"/3ds/attached/20110421/20110421125853_106.jpg\" /> fghfg<img border=\"0\" alt=\"\" src=\"/3ds/attached/20110421/20110421125853_106.jpg\" /> ";
DelImg.delImagesFile("./",shtmlText);
}
}