运行结果:
package base;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ZYJ {
/**
* @param args
*/
public static void main(String[] args) {
String htmlStr = "<img class=\"articleImg\" nodes=\"%5B%5D\" src=\"http://img.jcbzw315.com/upload/user/space/32777/2016/04/30/59cfbcc5-2888-49a6-91fe-37529d1d819b.jpg\" style=\"\">";
System.out.println("开始:" + htmlStr);
htmlStr = ZYJ.changeHtmlTag(htmlStr, "img", "src", "data-original", "\"");
htmlStr = ZYJ.updateAllHtmlTag(htmlStr, "img", "src", "/assets/images/pub/loading_bg.gif", "\"");
System.out.println("最终: " + ZYJ.updateHtmlTag(htmlStr, "img", "class", "", " lazy\""));
}
/**
* @param htmlStr
* html文本
* @param searchTag
* 要修改的目标标签
* @param searchAttrib
* 目标标签中的属性
* @param newStr
* 修改值 保留原本
*/
public static String updateHtmlTag(String htmlStr, String searchTag, String searchAttrib, String startStr, String endStr) {
String regxpForTag = "<\\s*" + searchTag + "\\s+([^>]*)\\s*>";
String regxpForTagAttrib = searchAttrib + "\\s*=\\s*[\"|']([^\"|']+)[\"|']";// "=[\"|']http://([^[\"|']]+)[\"|']";
Pattern patternForTag = Pattern.compile(regxpForTag);
Pattern patternForAttrib = Pattern.compile(regxpForTagAttrib);
Matcher matcherForTag = patternForTag.matcher(htmlStr);
StringBuffer sb = new StringBuffer();
boolean result = matcherForTag.find();
while (result) {
StringBuffer sbreplace = new StringBuffer("<" + searchTag + " ");
// System.out.println("原本的matcherForTag:" + matcherForTag.group(1));
Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag.group(1));
if (matcherForAttrib.find()) {
// System.out.println("原本的matcherForAttrib:" +
// matcherForAttrib.group(1));
matcherForAttrib.appendReplacement(sbreplace, searchAttrib + "=\"" + startStr + matcherForAttrib.group(1) + endStr);
}
matcherForAttrib.appendTail(sbreplace);
matcherForTag.appendReplacement(sb, sbreplace.toString() + ">");
result = matcherForTag.find();
}
matcherForTag.appendTail(sb);
return sb.toString();
}
/**
* @param htmlStr
* html文本
* @param searchTag
* 要修改的目标标签
* @param searchAttrib
* 目标标签中的属性
* @param newStr
* 修改值 不保留原本
*/
public static String updateAllHtmlTag(String htmlStr, String searchTag, String searchAttrib, String startStr, String endStr) {
String regxpForTag = "<\\s*" + searchTag + "\\s+([^>]*)\\s*>";
String regxpForTagAttrib = searchAttrib + "\\s*=\\s*[\"|']([^\"|']+)[\"|']";// "=[\"|']http://([^[\"|']]+)[\"|']";
Pattern patternForTag = Pattern.compile(regxpForTag);
Pattern patternForAttrib = Pattern.compile(regxpForTagAttrib);
Matcher matcherForTag = patternForTag.matcher(htmlStr);
StringBuffer sb = new StringBuffer();
boolean result = matcherForTag.find();
while (result) {
StringBuffer sbreplace = new StringBuffer("<" + searchTag + " ");
// System.out.println("原本的matcherForTag:" + matcherForTag.group(1));
Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag.group(1));
if (matcherForAttrib.find()) {
// System.out.println("原本的matcherForAttrib:" +
// matcherForAttrib.group(1));
matcherForAttrib.appendReplacement(sbreplace, searchAttrib + "=\"" + startStr + endStr);
}
matcherForAttrib.appendTail(sbreplace);
matcherForTag.appendReplacement(sb, sbreplace.toString() + ">");
result = matcherForTag.find();
}
matcherForTag.appendTail(sb);
return sb.toString();
}
/**
* @param htmlStr
* html文本
* @param searchTag
* 要修改的目标标签
* @param searchAttrib
* 目标标签中的属性
* @param newStr
* 修改值 不保留原本
*/
public static String changeHtmlTag(String htmlStr, String searchTag, String searchAttrib, String startStr, String endStr) {
String regxpForTag = "<\\s*" + searchTag + "\\s+([^>]*)\\s*>";
String regxpForTagAttrib = searchAttrib + "\\s*=\\s*[\"|']([^\"|']+)[\"|']";// "=[\"|']http://([^[\"|']]+)[\"|']";
Pattern patternForTag = Pattern.compile(regxpForTag);
Pattern patternForAttrib = Pattern.compile(regxpForTagAttrib);
Matcher matcherForTag = patternForTag.matcher(htmlStr);
StringBuffer sb = new StringBuffer();
boolean result = matcherForTag.find();
while (result) {
StringBuffer sbreplace = new StringBuffer("<" + searchTag + " ");
// System.out.println("原本的matcherForTag:" + matcherForTag.group(1));
Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag.group(1));
if (matcherForAttrib.find()) {
// System.out.println("原本的matcherForAttrib:" +
// matcherForAttrib.group(1));
matcherForAttrib.appendReplacement(sbreplace, startStr + "=\"" + matcherForAttrib.group(1) + "\" " + searchAttrib + "=\"" + matcherForAttrib.group(1) + "\" ");
}
matcherForAttrib.appendTail(sbreplace);
matcherForTag.appendReplacement(sb, sbreplace.toString() + ">");
result = matcherForTag.find();
}
matcherForTag.appendTail(sb);
return sb.toString();
}
/**
* @param htmlStr
* html文本
* @param searchTag
* 要修改的目标标签
* @param searchAttrib
* 目标标签中的属性
* @param newStr
* 修改值 不保留原本 判断是否存在标签 不存在 直接 新增进去
*/
public static String JudgeChangeHtmlTag(String htmlStr, String searchTag, String searchAttrib, String startStr, String endStr) {
String regxpForTag = "<\\s*" + searchTag + "\\s+([^>]*)\\s*>";
String regxpForTagAttrib = searchAttrib + "\\s*=\\s*[\"|']([^\"|']+)[\"|']";// "=[\"|']http://([^[\"|']]+)[\"|']";
Pattern patternForTag = Pattern.compile(regxpForTag);
Pattern patternForAttrib = Pattern.compile(regxpForTagAttrib);
Matcher matcherForTag = patternForTag.matcher(htmlStr);
StringBuffer sb = new StringBuffer();
boolean result = matcherForTag.find();
while (result) {
StringBuffer sbreplace = new StringBuffer("<" + searchTag + " ");
// System.out.println("原本的matcherForTag:" + matcherForTag.group(1));
Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag.group(1));
if (matcherForAttrib.find()) {
// System.out.println("原本的matcherForAttrib:" +
// matcherForAttrib.group(1));
matcherForAttrib.appendReplacement(sbreplace, startStr + "=\"" + matcherForAttrib.group(1) + "\" " + searchAttrib + "=\"" + matcherForAttrib.group(1) + "\" ");
}
matcherForAttrib.appendTail(sbreplace);
matcherForTag.appendReplacement(sb, sbreplace.toString() + ">");
result = matcherForTag.find();
}
matcherForTag.appendTail(sb);
return sb.toString();
}
}