第一類(lèi):?jiǎn)螛?biāo)簽的匹配正則蚁堤,以br為例:
Pattern p1 = Pattern.compile("<br\\s[^>]*>(.*?)(\\/> || >)");
Matcher m1 = p1.matcher(content);
while(m1.find()) {
//匹配到的內(nèi)容
? ? String before_replace_tag = m1.group();
? ? if(before_replace_tag.length()>4){
log.info("已替換的內(nèi)容是:" + before_replace_tag);
? ? ? ? content = content.replace(before_replace_tag,"");
? ? }else {
log.info( before_replace_tag +" 未達(dá)到替換標(biāo)準(zhǔn),不進(jìn)行替換!" );
? ? }
}
ps:其中的 (\\/> || >) 代表同時(shí)匹配有關(guān)閉符號(hào)和無(wú)關(guān)閉符號(hào)的剥懒,[^>]表示不是“>”的字符塘砸,*表示重復(fù)零次或更多次扼倘,這個(gè)意思是非“>”的字符可以有一個(gè)或多個(gè)遇绞,也可以沒(méi)有嗓奢。
可以匹配到的內(nèi)容有下面這種樣式的:
<br style="box-sizing: inherit;text-align: center;">
<br style="box-sizing: inherit; padding: 0px; list-style-type: none; outline: none !important;"/>
<br style="box-sizing: inherit; padding: 0px; list-style-type: none; outline: none !important;">
第二類(lèi):雙標(biāo)簽的匹配讼撒,以a標(biāo)簽為例:
Pattern p1 = Pattern.compile("<a\\s[^>]*>(.*?)<\\/a>");
? ? ? ? ? ? Matcher m1 = p1.matcher(html);
? ? ? ? ? ? while(m1.find()) {
? ? ? ? ? ? ? ? String before_replace_tag = m1.group() ;
? ? ? ? ? ? ? ? int start_index = before_replace_tag.indexOf(">");
? ? ? ? ? ? ? ? int end_index = before_replace_tag.indexOf("</a>") ;
? ? ? ? ? ? ? ? String after_replace_tag = before_replace_tag ;
? ? ? ? ? ? ? ? if(start_index != -1 && end_index!= -1 && end_index > start_index){
? ? ? ? ? ? ? ? ? ? after_replace_tag = before_replace_tag.substring(start_index + 1,end_index) ;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? html = html.replace(before_replace_tag,after_replace_tag) ;
? ? ? ? ? ? }
ps:可以匹配到任何的url。
常用正則的匹配理解:
后邊多一個(gè)股耽?表示懶惰模式根盒。
必須跟在*或者+后邊用
如:<img src="test.jpg" width="60px" height="80px"/>
如果用正則匹配src中內(nèi)容非懶惰模式匹配
src=".*"
匹配結(jié)果是:src="test.jpg" width="60px" height="80px"
意思是從="往后匹配,直到最后一個(gè)"匹配結(jié)束
懶惰模式正則:
src=".*?"
結(jié)果:src="test.jpg"
因?yàn)槠ヅ涞降谝粋€(gè)"就結(jié)束了一次匹配物蝙。不會(huì)繼續(xù)向后匹配炎滞。因?yàn)樗麘卸杪铩?/p>
.表示除\n之外的任意字符
*表示匹配0-無(wú)窮
+表示匹配1-無(wú)窮