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();
}