今天工作时遇到一个问题, 用正则处理html标签时不知该如何下手。还好有Matcher帮助解决了问题。
需求如下:
例如有如下html文章内容:
在我们做文章内链的时候, 往往掺杂了一些我们不想要的链接, 如上所示我们只想保留www.jiakaobaodian.com 的链接, 如下是我们希望得到的:

说白了就是去掉自己不需要的标签, 但是保留标签中的文本。
开始尝试用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类。

Matcher类的简单使用的更多相关文章

  1. JAVA正则表达式:Pattern类与Matcher类详解(转)

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...

  2. 正则表达式:Pattern类与Matcher类详解

    一.捕获组的概念 捕获组可以通过从左到右计算其开括号来编号,编号是从1 开始的.例如,在表达式((A)(B(C)))中,存在四个这样的组: 1     ((A)(B(C))) 2     (A) 3  ...

  3. JAVA正则表达式:Pattern类与Matcher类详解

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...

  4. Matcher类:(转)

    Matcher类:     使用Matcher类,最重要的一个概念必须清楚:组(Group),在正则表达式中 ()定义了一个组,由于一个正则表达式可以包含很多的组,所以下面先说说怎么划分组的, 以及这 ...

  5. Java正则表达式:Pattern类和Matcher类

    一.捕获组的概念 捕获组可以通过从左到右计算其开括号来编号,编号是从1 开始的.例如,在表达式 ((A)(B(C)))中,存在四个这样的组: 1     ((A)(B(C))) 2     (A) 3 ...

  6. [转] JAVA正则表达式:Pattern类与Matcher类详解(转)

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和 Matcher Pattern 一个Pattern是一个正则表达式经编译后的 ...

  7. 正则表达式中Pattern类、Matcher类和matches()方法简析

    1.简介:  java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.  它包括两个类:Pattern和Matcher . Pattern: 一个Pattern是一 ...

  8. [01] Pattern类和Matcher类

    在Java中,有个java.util.regex包,这是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 它主要有两个类: Pattern   一个正则表达式经编译后的表现模式,可以理解为 ...

  9. Java字符串的匹配问题,String类的matches方法与Matcher类的matches方法的使用比较,Matcher类的matches()、find()和lookingAt()方法的使用比较

    参考网上相关blog,对Java字符串的匹配问题进行了简单的比较和总结,主要对String类的matches方法与Matcher类的matches方法进行了比较. 对Matcher类的matches( ...

随机推荐

  1. vue学习问题总结(一)

    使用comopontent组件报错错误信息:vue.js:491 [Vue warn]: Unknown custom element: <todo-item> - did you reg ...

  2. ubuntu重启、关机命令

    重启命令 :     1.reboot     2.shutdown -r now 立刻重启    3.shutdown -r 10 过10分钟自动重启    4.shutdown -r 20:35 ...

  3. c++ 如何把RGB图像转换成HSV图像?

    CV_<bit_depth>(S|U|F)C<number_of_channels> 1--bit_depth---比特数---代表8bite,16bites,32bites, ...

  4. HDU - 2102 A计划 (BFS) [kuangbin带你飞]专题二

    思路:接BFS判断能否在限制时间内到达公主的位置,注意如果骑士进入传送机就会被立即传送到另一层,不会能再向四周移动了,例如第一层的位置(x, y, 1)是传送机,第二层(x, y, 2)也是传送机,这 ...

  5. hexo持续更新记录

    port:50187

  6. Redis笔记2-发布订阅

    发布/订阅"(publish/subscribe)模式可以实现进程间通信,订阅者可以订阅一个或多个频道(channel),而发布者可以向指定的频道发送消息,所有订阅次频道的订阅者都会收到次消 ...

  7. HttpClient调用RestFul接口(post和get方式)

    /** * @version V1.0 * @Description 调用http接口工具类 * @Author pc * @Date 2018/3/2 11:03 */public class Ht ...

  8. 如何在模拟器里体验微软HoloLens

    众所周知,微软的HoloLens以及MR设备售价都比较高,这让不少感兴趣的朋友们望而却步,本篇教程将向大家介绍如何在模拟器里体验传说中的HoloLens. 1.需要准备的硬件: 智能手机一台(WP.A ...

  9. Linux基础二

    linux命令分类 内部命令:属于shell解释器 外部命令:独立于shell解释器 检查命令类型 type:检查命令字的类型 [root@localhost ~]# type ls ls 是 `ls ...

  10. Android常见Crash原因总结(二)

    Android平台程序崩溃大家都应该遇到过,force close和ANR应该是大家遇到较多的. 这里把Android平台程序崩溃的各种类型做一个简述和原因列举. 1.ANR(可见ANR): 发生场景 ...