替换xml/html中的属性值 参考的
2016-07-11 17:36
369 查看
package com.sf.util.test.other; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ZYJ { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub // String htmlStr = "<b><font www=\"red\" pp='oo'>aaaaa</font><font www=\"red\" pp='oo'>aaaaa</font></b> "; String htmlStr = "<b><a href='http://www.baby.com' pp='oo'></a><a href =\"http://www.baby.com\" pp=\"o\">welcome</a></b> "; System.out.println("zyj "+ZYJ.updateHtmlTag(htmlStr, "a", "href","ljc" , "123\"","I Win")); } /** * @param htmlStr html文本 * @param searchTag 要修改的目标标签 * @param searchAttrib 目标标签中的属性 * @param newStr 修改值 */ public static String updateHtmlTag(String htmlStr, String searchTag, String searchAttrib,String startStr , String endStr,String newContent) { 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.group(1)); Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag .group(1)); if (matcherForAttrib.find()) { System.out.println("ll"+matcherForAttrib.group(1)); // matcherForAttrib.appendReplacement(sbreplace, searchAttrib+"=\"" +startStr // + matcherForAttrib.group(1) + endStr); matcherForAttrib.appendReplacement(sbreplace, searchAttrib+"=\"" +newContent + "\""); } // matcherForTag.appendReplacement(sb, sbreplace.toString()); matcherForAttrib.appendTail(sbreplace); matcherForTag.appendReplacement(sb, sbreplace.toString()+">"); result = matcherForTag.find(); } matcherForTag.appendTail(sb); return sb.toString(); } public static String replaceHtmlTag(String str, String beforeTag, String tagAttrib, String startTag, String endTag) { // String regxpForTag = "<//s*" + beforeTag + "//s+([^>]*)//s*>" ; String regxpForTag = "<//s*" + beforeTag + "//s+([^>]*)//s*"; // String regxpForTagAttrib = tagAttrib + "=//s*/"([^/"]+)/"" ; String regxpForTagAttrib = tagAttrib + "=//s*\"([^\"]+)\"" ; //Pattern.CASE_INSENSITIVE 忽略大小写 Pattern patternForTag = Pattern.compile (regxpForTag,Pattern. CASE_INSENSITIVE ); Pattern patternForAttrib = Pattern.compile (regxpForTagAttrib,Pattern. CASE_INSENSITIVE ); Matcher matcherForTag = patternForTag.matcher(str); StringBuffer sb = new StringBuffer (); boolean result = matcherForTag.find(); // 循环找出每个 img 标签 while (result) { StringBuffer sbreplace = new StringBuffer( "<img " ); Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag .group(1)); if (matcherForAttrib.find()) { matcherForAttrib.appendReplacement(sbreplace, startTag + matcherForAttrib.group(1) + endTag); } matcherForAttrib.appendTail(sbreplace); matcherForTag.appendReplacement(sb, sbreplace.toString()); result = matcherForTag.find(); } matcherForTag.appendTail(sb); return sb.toString(); } } /** * * 基本功能:替换指定的标签 * @author linshutao * @param str * @param beforeTag 要替换的标签 * @param tagAttrib 要替换的标签属性值 * @param startTag 新标签开始标记 * @param endTag 新标签结束标记 * @return String */ public static String replaceHtmlTag(String str, String beforeTag, String tagAttrib, String startTag, String endTag) { // String regxpForTag = "<//s*" + beforeTag + "//s+([^>]*)//s*>" ; String regxpForTag = "<//s*" + beforeTag + "//s+([^>]*)//s*" ; String regxpForTagAttrib = tagAttrib + "=//s*/"([^/"]+)/"" ; //Pattern.CASE_INSENSITIVE 忽略大小写 Pattern patternForTag = Pattern.compile (regxpForTag,Pattern. CASE_INSENSITIVE ); Pattern patternForAttrib = Pattern.compile (regxpForTagAttrib,Pattern. CASE_INSENSITIVE ); Matcher matcherForTag = patternForTag.matcher(str); StringBuffer sb = new StringBuffer (); boolean result = matcherForTag.find(); // 循环找出每个 img 标签 while (result) { StringBuffer sbreplace = new StringBuffer( "<img " ); Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag .group(1)); if (matcherForAttrib.find()) { matcherForAttrib.appendReplacement(sbreplace, startTag + matcherForAttrib.group(1) + endTag); } matcherForAttrib.appendTail(sbreplace); matcherForTag.appendReplacement(sb, sbreplace.toString()); result = matcherForTag.find(); } matcherForTag.appendTail(sb); return sb.toString(); }