Matcher類的簡單使用


今天工作時遇到一個問題, 用正則處理html標簽時不知該如何下手。還好有Matcher幫助解決了問題。
需求如下:

例如有如下html文章內容:

在我們做文章內鏈的時候, 往往摻雜了一些我們不想要的鏈接, 如上所示我們只想保留 www.jiakaobaodian.com 的鏈接, 如下是我們希望得到的:

說白了就是去掉自己不需要的標簽, 但是保留標簽中的文本。
開始嘗試用Jsoup,Dom4j 一類的解析這段html, 但是后面在刪除標簽的時候都遇到了問題, 最后嘗試使用Matcher中的 appendReplacementappendReplacement才解決問題。

1, 使用實例:
Image[4]

輸出結果是將沒有匹配到的a標簽都remove掉且保留了標簽中的文字。
結果如下圖:
Image(1)[4]


下面在講一個簡單的案例:
public static void main(String[] args) throws Exception{
    Pattern p = Pattern.compile("(\\w+)%(\\d+)");
    Matcher m = p.matcher("ab%12cd%34");
    StringBuffer s = new StringBuffer();
    while (m.find()) {
        m.appendReplacement(s, "app");
    }
    System.out.println(s);// appapp
    m.appendTail(s);
    System.out.println(s);// appapp
}

先看下這段正則的匹配情況:
Image(2)[4]
圖中彩色的部分就是匹配到情況, 遇到這種需要正則匹配且時時看到結果的, 大家可以到: https://regex101.com/ 上測試。
然后看下輸出結果:
Image(3)

2, 解釋說明:
public Matcher appendReplacement(StringBuffer sb, String replacement)
將當前匹配子串替換為指定字符串,並將從上次匹配結束后到本次匹配結束后之間的字符串添加到一個StringBuffer對象中,最后返回其字符串表示形式。
注意:對於最后一次匹配,其后的字符串並沒有添加入StringBuffer對象中,若需要這部分的內容需要使用appendTail方法。

public StringBuffer appendTail(StringBuffer sb)
將最后一次匹配工作后剩余的字符串添加到一個StringBuffer對象里。

更多內容大家可以查看Matcher類。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM