Matcher类的简单使用
生活随笔
收集整理的這篇文章主要介紹了
Matcher类的简单使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天工作時遇到一個問題, 用正則處理html標簽時不知該如何下手。還好有Matcher幫助解決了問題。 需求如下:
例如有如下html文章內容: <p><a href="www.baidu.com">百度的鏈接</a>; 這是一個百度的鏈接。 <a href="www.jiakaobaodian.com">駕考寶典的鏈接</a>這是一個駕考寶典的鏈接</p>;
在我們做文章內鏈的時候, 往往摻雜了一些我們不想要的鏈接, 如上所示我們只想保留www.jiakaobaodian.com 的鏈接, 如下是我們希望得到的: <p>這是一個百度的鏈接。<a href="www.jiakaobaodian.com">駕考寶典的鏈接</a>這是一個駕考寶典的鏈接</p>;
說白了就是去掉自己不需要的標簽, 但是保留標簽中的文本。 開始嘗試用Jsoup,Dom4j 一類的解析這段html, 但是后面在刪除標簽的時候都遇到了問題, 最后嘗試使用Matcher中的appendReplacement和appendReplacement才解決問題。
1, 使用實例:
輸出結果是將沒有匹配到的a標簽都remove掉且保留了標簽中的文字。 結果如下圖:
下面在講一個簡單的案例: public static void main(String[] args) throws Exception{ ??? Pattern p = Pattern.compile("(\\w+)%(\\d+)"); ??? Matcher m = p.matcher("前ab%12中cd%34后"); ??? StringBuffer s = new StringBuffer(); ??? while (m.find()) { ??????? m.appendReplacement(s, "app"); ??? } ??? System.out.println(s);// 前app中app ??? m.appendTail(s); ??? System.out.println(s);// 前app中app后 }
先看下這段正則的匹配情況: 圖中彩色的部分就是匹配到情況, 遇到這種需要正則匹配且時時看到結果的, 大家可以到: https://regex101.com/ 上測試。 然后看下輸出結果:
2, 解釋說明: public Matcher appendReplacement(StringBuffer sb, String replacement) 將當前匹配子串替換為指定字符串,并將從上次匹配結束后到本次匹配結束后之間的字符串添加到一個StringBuffer對象中,最后返回其字符串表示形式。 注意:對于最后一次匹配,其后的字符串并沒有添加入StringBuffer對象中,若需要這部分的內容需要使用appendTail方法。
public StringBuffer appendTail(StringBuffer sb) 將最后一次匹配工作后剩余的字符串添加到一個StringBuffer對象里。
更多內容大家可以查看Matcher類。 參考:http://www.cnblogs.com/SQP51312/p/6134324.html
例如有如下html文章內容: <p><a href="www.baidu.com">百度的鏈接</a>; 這是一個百度的鏈接。 <a href="www.jiakaobaodian.com">駕考寶典的鏈接</a>這是一個駕考寶典的鏈接</p>;
在我們做文章內鏈的時候, 往往摻雜了一些我們不想要的鏈接, 如上所示我們只想保留www.jiakaobaodian.com 的鏈接, 如下是我們希望得到的: <p>這是一個百度的鏈接。<a href="www.jiakaobaodian.com">駕考寶典的鏈接</a>這是一個駕考寶典的鏈接</p>;
說白了就是去掉自己不需要的標簽, 但是保留標簽中的文本。 開始嘗試用Jsoup,Dom4j 一類的解析這段html, 但是后面在刪除標簽的時候都遇到了問題, 最后嘗試使用Matcher中的appendReplacement和appendReplacement才解決問題。
1, 使用實例:
輸出結果是將沒有匹配到的a標簽都remove掉且保留了標簽中的文字。 結果如下圖:
下面在講一個簡單的案例: public static void main(String[] args) throws Exception{ ??? Pattern p = Pattern.compile("(\\w+)%(\\d+)"); ??? Matcher m = p.matcher("前ab%12中cd%34后"); ??? StringBuffer s = new StringBuffer(); ??? while (m.find()) { ??????? m.appendReplacement(s, "app"); ??? } ??? System.out.println(s);// 前app中app ??? m.appendTail(s); ??? System.out.println(s);// 前app中app后 }
先看下這段正則的匹配情況: 圖中彩色的部分就是匹配到情況, 遇到這種需要正則匹配且時時看到結果的, 大家可以到: https://regex101.com/ 上測試。 然后看下輸出結果:
2, 解釋說明: public Matcher appendReplacement(StringBuffer sb, String replacement) 將當前匹配子串替換為指定字符串,并將從上次匹配結束后到本次匹配結束后之間的字符串添加到一個StringBuffer對象中,最后返回其字符串表示形式。 注意:對于最后一次匹配,其后的字符串并沒有添加入StringBuffer對象中,若需要這部分的內容需要使用appendTail方法。
public StringBuffer appendTail(StringBuffer sb) 將最后一次匹配工作后剩余的字符串添加到一個StringBuffer對象里。
更多內容大家可以查看Matcher類。 參考:http://www.cnblogs.com/SQP51312/p/6134324.html
轉載于:https://www.cnblogs.com/wang-meng/p/7613177.html
總結
以上是生活随笔為你收集整理的Matcher类的简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue.js devtools的安
- 下一篇: Python 购物车