摘要:首先需要創建一個類對象,表示需要匹配的規則。調用方法,如果能匹配到則返回,否則返回,根據業務需求這里可以添加判斷如果返回的是,這時候調用方法,可以獲取到匹配到的字符串,這里的內容是,不包括匹配規則的內容。
在使用Editor(所見即所得編輯器)的時候,有時候可能會碰到需要在后臺修改編輯器的內容,而且這些內容還都是HTML格式的數據,這個時候如果需要定位到某個標簽的話就比較困難,畢竟是后臺語言,不像前端的js一樣可以在頁面上直接取到某個標簽,今天就分析一下使用Java如何操作HTML格式的字符串。
首先需要創建一個Patten類對象,表示需要匹配的規則。
String regxpForEmbedTag = "]*)s*/>"; Pattern pattern = Pattern.compile(regxpForEmbedTag);
比如,這里是匹配embed標簽的規則,在編輯器里面視頻生成的格式就是這個標簽(現在有些編輯器可能不是了),compile方法還可以給第二個參數,可以傳Pattern.CASE_INSENSITIVE進去,這樣匹配規則就不區分大小寫了。
然后調用matcher方法,傳入待匹配內容,得到Matcher對象。
String content=""; Matcher matcher = pattern.matcher(content);
調用find方法,如果能匹配到則返回true,否則返回false,根據業務需求這里可以添加判斷;
boolean result = matcher.find();
如果返回的是true,這時候調用group方法,可以獲取到匹配到的字符串,
String embedStr = matcher.group(1);
這里embedStr的內容是height="400 width="480"" autostart="false" src="http://localhost:8080/uploadFile/test.mp4",不包括匹配規則的內容。
group方法必須在find方法調用之后,否則會報錯,group也可以不傳參數得到結果跟參數為0是一樣的,這里參數的意思為:把正則表達式按照()分組,序號從1開始,在當前匹配到字符串中獲取指定的分組匹配到的內容,這說起來有點拗口,比如上面的正則表達式為]*)s*/>,則可以用的參數只有0和1(如果傳入的參數大于分組的序號則會報異常),在執行完matcher.find()之后,使用group()或group(0)得到的結果是
而如果使用group(1)則得到的結果為
height="400 width="480" autostart="false" src="http://localhost:8080/uploadFile/test.mp4"
內容需要匹配多次則可以循環調用find()方法。
如果我們現在要把width這個屬性修改為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方法,把匹配到的內容替換成指定的字符串,注意這里替換的時候,被替換的內容是包含匹配規則的,所以在這里需要自己加上匹配規則的內容,也就是width="",appendReplacement方法有兩個參數,第一個參數用來存放替換后的字符串,類型為StringBuffer,第二個參數為替換的目標值,這里在執行完appendReplacement方法之后,temp的值為height="400 width="100%",temp等于匹配到的字符串之前的所有內容加上被匹配后的內容,但是這里丟失了后面的內容,所以最后我們執行了appendTail方法,可以把匹配到的字符串之后的所有內容添加到temp中。
下面是一個簡單的替換例子:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { public static void main(String[] args) { String content = "這是內容開始
" + "
" + "這是內容中間
" + "
" + "這是內容結尾"; 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; } } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64377.html
摘要:首先需要創建一個類對象,表示需要匹配的規則。調用方法,如果能匹配到則返回,否則返回,根據業務需求這里可以添加判斷如果返回的是,這時候調用方法,可以獲取到匹配到的字符串,這里的內容是,不包括匹配規則的內容。 在使用Editor(所見即所得編輯器)的時候,有時候可能會碰到需要在后臺修改編輯器的內容,而且這些內容還都是HTML格式的數據,這個時候如果需要定位到某個標簽的話就比較困難,畢竟是后...
摘要:到目前為止,使用越來越廣泛,不光光只是它強大的生成技術,而且它能夠與進行很好的集成。注意使用數字范圍來定義集合時無需使用方括號數字范圍也支持反遞增的數字范圍如對象對象使用花括號包括中的對之間以英文冒號分隔,多組對之間以英文逗號分隔。 Freemarker的介紹 ??Freemarker 是一款模板引擎,是一種基于模版生成靜態文件的通用 工具,它是為程序員提供的一個開發包,或者說是一個類...
摘要:下面隆重介紹簡介是一個解析的第三方庫,它提供了一套非常方便的,可使用,以及類的操作方法來取出和操作數據。一個文檔的對象模型文檔由多個和組成其繼承結構如下繼承繼承繼承一個包含一個子節點集合,并擁有一個父。 前言 使用python寫爬蟲的人,應該都聽過beautifulsoup4這個包,用來它來解析網頁甚是方便。那么在java里有沒有類似的包呢?當然有啦!而且也非常好用。下面隆重介紹jso...
摘要:是目前最流行的一種互聯網軟件架構。協議,是一個無狀態協議,即所有的狀態都保存在服務器端。而這種轉化是建立在表現層之上的,所以就是表現層狀態轉化。具體說,就是協議里面,四個表示操作方式的動詞。 一、SpringMVC概述 Spring為展現層提供的基于MVC設計理念的優秀的Web框架,是目前最主流的MVC框架之一 Spring3.0之后全面超越Struts2,成為最優秀的MVC框架 S...
閱讀 1527·2023-04-26 00:20
閱讀 1122·2023-04-25 21:49
閱讀 803·2021-09-22 15:52
閱讀 578·2021-09-07 10:16
閱讀 972·2021-08-18 10:22
閱讀 2665·2019-08-30 14:07
閱讀 2237·2019-08-30 14:00
閱讀 2651·2019-08-30 13:00