1. 程式人生 > >正則表示式替換 html 標籤

正則表示式替換 html 標籤



/**
* 此方法描述的是:字串的替換
* @param string 需要替換的字串
* @param oldString 被替換的字串
* @param newString 新字串
* @author 作者 E-mail: [email protected]
* @version 建立時間:2009-9-13 下午01:34:23
*/
public static String replace(String string, String oldString, String newString) {
if (string == null) {
return null;
}
int i = 0; //初始位置,從0開始

//從指定位置開始查詢oldString在string中的起始位置
if ((i = string.indexOf(oldString, i)) >= 0) {
// Use char []'s, as they are more efficient to deal with.
char[] string2 = string.toCharArray();
char[] newString2 = newString.toCharArray();
int oLength = oldString.length();
//StringBuilder 簡易替換 比 StringBuffer 要快
StringBuilder buf = new StringBuilder(string2.length);
//string2從起始位置到 i 的部分... 繼續追加新串 newString2
buf.append(string2, 0, i).append(newString2);
//string中舊字串的結束位置
i += oLength;
int j = i;
// Replace all remaining instances of oldString with newString.
//用新串替換所有出現的舊串
while ((i = string.indexOf(oldString, i)) > 0) {
buf.append(string2, j, i - j).append(newString2);
i += oLength;
j = i;
}
//用新串替換後的string2中截獲最後一次出現新串的結束位置到結尾
buf.append(string2, j, string2.length - j);
return buf.toString();
}
return string;
}

/**
* 此方法描述的是:使用正則替換字串<br>tt</br>中含有的html標籤和js標籤
* @param string 傳入字串
* @author 作者 E-mail:
[email protected]

* @version 建立時間:2009-9-29 下午03:34:23
*/
public static String stripHTMLTags(String tt){
//匹配所有帶字母的標籤(包括js標籤)
String tag = "</?[a-zA-Z]*([\\s]*([A-Za-z]+[\\s]?=[\\s]?(\"|')?[\\w]+(\"|')?))*>";
//匹配js標籤
String javascriptTag = "<script[\\s]*(.)*>";
Pattern p = Pattern.compile(tag);
//起始
int index = 0;
//結束
int last;
while((index = tt.indexOf("<",index)) != -1){
if((last = tt.indexOf(">",index)) != -1){
//目標字串
String oldString = tt.substring(index, last+1);
Matcher m = p.matcher(oldString);
//首先判斷是否為js標籤
if(Pattern.compile(javascriptTag).matcher(oldString).matches()){
if((last = tt.indexOf("</script>",last)) != -1){
tt = replace(tt, tt.substring(index, last+9), "");
}
//再判斷是否為html標籤(html正則考慮去除js標籤正則???後補)
}else if(m.matches()){
tt = replace(tt, oldString, "");
}
}else{
break;
}
}
return tt;
}