摘要:首先需要?jiǎng)?chuàng)建一個(gè)類對象,表示需要匹配的規(guī)則。調(diào)用方法,如果能匹配到則返回,否則返回,根據(jù)業(yè)務(wù)需求這里可以添加判斷如果返回的是,這時(shí)候調(diào)用方法,可以獲取到匹配到的字符串,這里的內(nèi)容是,不包括匹配規(guī)則的內(nèi)容。
在使用Editor(所見即所得編輯器)的時(shí)候,有時(shí)候可能會碰到需要在后臺修改編輯器的內(nèi)容,而且這些內(nèi)容還都是HTML格式的數(shù)據(jù),這個(gè)時(shí)候如果需要定位到某個(gè)標(biāo)簽的話就比較困難,畢竟是后臺語言,不像前端的js一樣可以在頁面上直接取到某個(gè)標(biāo)簽,今天就分析一下使用Java如何操作HTML格式的字符串。
首先需要?jiǎng)?chuàng)建一個(gè)Patten類對象,表示需要匹配的規(guī)則。
String regxpForEmbedTag = "]*)s*/>"; Pattern pattern = Pattern.compile(regxpForEmbedTag);
比如,這里是匹配embed標(biāo)簽的規(guī)則,在編輯器里面視頻生成的格式就是這個(gè)標(biāo)簽(現(xiàn)在有些編輯器可能不是了),compile方法還可以給第二個(gè)參數(shù),可以傳Pattern.CASE_INSENSITIVE進(jìn)去,這樣匹配規(guī)則就不區(qū)分大小寫了。
然后調(diào)用matcher方法,傳入待匹配內(nèi)容,得到Matcher對象。
String content=""; Matcher matcher = pattern.matcher(content);
調(diào)用find方法,如果能匹配到則返回true,否則返回false,根據(jù)業(yè)務(wù)需求這里可以添加判斷;
boolean result = matcher.find();
如果返回的是true,這時(shí)候調(diào)用group方法,可以獲取到匹配到的字符串,
String embedStr = matcher.group(1);
這里embedStr的內(nèi)容是height="400 width="480"" autostart="false" src="http://localhost:8080/uploadFile/test.mp4",不包括匹配規(guī)則的內(nèi)容。
group方法必須在find方法調(diào)用之后,否則會報(bào)錯(cuò),group也可以不傳參數(shù)得到結(jié)果跟參數(shù)為0是一樣的,這里參數(shù)的意思為:把正則表達(dá)式按照()分組,序號從1開始,在當(dāng)前匹配到字符串中獲取指定的分組匹配到的內(nèi)容,這說起來有點(diǎn)拗口,比如上面的正則表達(dá)式為]*)s*/>,則可以用的參數(shù)只有0和1(如果傳入的參數(shù)大于分組的序號則會報(bào)異常),在執(zhí)行完matcher.find()之后,使用group()或group(0)得到的結(jié)果是
而如果使用group(1)則得到的結(jié)果為
height="400 width="480" autostart="false" src="http://localhost:8080/uploadFile/test.mp4"
內(nèi)容需要匹配多次則可以循環(huán)調(diào)用find()方法。
如果我們現(xiàn)在要把width這個(gè)屬性修改為100%,可以這樣做
String regxpForWidth = "width="([^"]+)""; Matcher matcherForWidth = Pattern.compile(regxpForWidth).matcher(embedStr); if (matcherForWidth.find()){ StringBuffer temp = new StringBuffer(); matcher.appendReplacement(temp, "width="100%""); matcher.appendTail(temp); }
這里通過appendReplacement方法,把匹配到的內(nèi)容替換成指定的字符串,注意這里替換的時(shí)候,被替換的內(nèi)容是包含匹配規(guī)則的,所以在這里需要自己加上匹配規(guī)則的內(nèi)容,也就是width="",appendReplacement方法有兩個(gè)參數(shù),第一個(gè)參數(shù)用來存放替換后的字符串,類型為StringBuffer,第二個(gè)參數(shù)為替換的目標(biāo)值,這里在執(zhí)行完appendReplacement方法之后,temp的值為height="400 width="100%",temp等于匹配到的字符串之前的所有內(nèi)容加上被匹配后的內(nèi)容,但是這里丟失了后面的內(nèi)容,所以最后我們執(zhí)行了appendTail方法,可以把匹配到的字符串之后的所有內(nèi)容添加到temp中。
下面是一個(gè)簡單的替換例子:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { public static void main(String[] args) { String content = "這是內(nèi)容開始
" + "
" + "這是內(nèi)容中間
" + "
" + "這是內(nèi)容結(jié)尾"; String regxpForEmbedTag = "]*)s*/>"; Matcher matcher = Pattern.compile(regxpForEmbedTag).matcher(content); StringBuffer sb = new StringBuffer(); while (matcher.find()) { String contentTemp = matcher.group(1); contentTemp = replaceContentByPartten(contentTemp, "src="([^"]+)"", "src="http://localhost:8080/uploadFile/test.mp4""); contentTemp = replaceContentByPartten(contentTemp, "width="([^"]+)"", "width="100%""); matcher.appendReplacement(sb, ""); } matcher.appendTail(sb); System.out.println(sb.toString()); } public static String replaceContentByPartten(String content, String partten, String target) { Matcher matcher = Pattern.compile(partten, Pattern.CASE_INSENSITIVE).matcher(content); if (matcher.find()) { StringBuffer temp = new StringBuffer(); matcher.appendReplacement(temp, target); matcher.appendTail(temp); return temp.toString(); } else { return content; } } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/49579.html
摘要:首先需要?jiǎng)?chuàng)建一個(gè)類對象,表示需要匹配的規(guī)則。調(diào)用方法,如果能匹配到則返回,否則返回,根據(jù)業(yè)務(wù)需求這里可以添加判斷如果返回的是,這時(shí)候調(diào)用方法,可以獲取到匹配到的字符串,這里的內(nèi)容是,不包括匹配規(guī)則的內(nèi)容。 在使用Editor(所見即所得編輯器)的時(shí)候,有時(shí)候可能會碰到需要在后臺修改編輯器的內(nèi)容,而且這些內(nèi)容還都是HTML格式的數(shù)據(jù),這個(gè)時(shí)候如果需要定位到某個(gè)標(biāo)簽的話就比較困難,畢竟是后...
摘要:到目前為止,使用越來越廣泛,不光光只是它強(qiáng)大的生成技術(shù),而且它能夠與進(jìn)行很好的集成。注意使用數(shù)字范圍來定義集合時(shí)無需使用方括號數(shù)字范圍也支持反遞增的數(shù)字范圍如對象對象使用花括號包括中的對之間以英文冒號分隔,多組對之間以英文逗號分隔。 Freemarker的介紹 ??Freemarker 是一款模板引擎,是一種基于模版生成靜態(tài)文件的通用 工具,它是為程序員提供的一個(gè)開發(fā)包,或者說是一個(gè)類...
摘要:它提供了一套非常省力的,可通過,以及類似于的操作方法來取出和操作數(shù)據(jù)。 XML:可擴(kuò)展標(biāo)記型語言 隨著json等一些技術(shù)的普及,似乎xml的路子越來越窄,雖然xml的一些功能被其他的一些技術(shù)代替,但是學(xué)習(xí)xml還是非常有必要,如果用xml存儲一些大量數(shù)據(jù),還是有一定優(yōu)勢的,就算你不管這些,但是現(xiàn)有的很多框架以及技術(shù)的配置文件都存在于xml中,最起碼你得對它的結(jié)構(gòu)以及一些基本用法有一定了...
摘要:下面隆重介紹簡介是一個(gè)解析的第三方庫,它提供了一套非常方便的,可使用,以及類的操作方法來取出和操作數(shù)據(jù)。一個(gè)文檔的對象模型文檔由多個(gè)和組成其繼承結(jié)構(gòu)如下繼承繼承繼承一個(gè)包含一個(gè)子節(jié)點(diǎn)集合,并擁有一個(gè)父。 前言 使用python寫爬蟲的人,應(yīng)該都聽過beautifulsoup4這個(gè)包,用來它來解析網(wǎng)頁甚是方便。那么在java里有沒有類似的包呢?當(dāng)然有啦!而且也非常好用。下面隆重介紹jso...
摘要:是目前最流行的一種互聯(lián)網(wǎng)軟件架構(gòu)。協(xié)議,是一個(gè)無狀態(tài)協(xié)議,即所有的狀態(tài)都保存在服務(wù)器端。而這種轉(zhuǎn)化是建立在表現(xiàn)層之上的,所以就是表現(xiàn)層狀態(tài)轉(zhuǎn)化。具體說,就是協(xié)議里面,四個(gè)表示操作方式的動詞。 一、SpringMVC概述 Spring為展現(xiàn)層提供的基于MVC設(shè)計(jì)理念的優(yōu)秀的Web框架,是目前最主流的MVC框架之一 Spring3.0之后全面超越Struts2,成為最優(yōu)秀的MVC框架 S...
閱讀 2495·2021-11-24 10:29
閱讀 2634·2021-09-24 09:48
閱讀 5737·2021-09-22 15:56
閱讀 3152·2021-09-06 15:00
閱讀 2667·2019-08-30 15:54
閱讀 741·2019-08-30 13:48
閱讀 2894·2019-08-30 11:17
閱讀 3417·2019-08-29 11:20