正则替换的方式删除特定的内容

    以前,公司网络限制,无法通过用户名密码登录某些网站,但是可以通过浏览器打开网站,而这些网站有个问题,非登录用户,不能复制博客中的代码,这个就有些麻烦了。

    好在,这些代码是可以通过查看网页源代码的方式获取。如下所示,我们看到csdn的代码:

    拿到html元素内容的办法:

     1、开启F12,进入开发者调试界面,

     2、切换到 元素 tab页,

     3、使用鼠标选择 代码部分。

     4、拷贝元素。

   我们分析这段内容,主要由html标签包裹,我们需要去掉标签部分。

    html标签有个特点,它是成对出现的,我们如果把所有的标签都去掉,那么其实就剩下内容部分了。有了这个思路,我们就可以开始工作了。

    这里考虑使用正则替换的方式,将标签去掉,标签类似<div>或者</div>。我们直接通过正则<.*>可能会将所有内容都干掉。因为<div>xxx</div>这种其实也会匹配上<.*>。并不能只去掉两边的<div>和</div>。

    这里需要考虑<>内部不能再出现闭合标签">",似乎有点难以理解,意思这里只匹配唯一一个标签<>,不管是开始标签<div>,还是关闭标签</div>。

     针对这个需求,正则再改变一下,<[^>]+>,替换效果如下所示:

    替换之后,正好剩下代码部分。就是我们需要的。

    这里稍微说一下,这是使用notepad++来做的,它支持正则表达式书写,所以我们在替换界面可以看到这样的信息:

    查找模式,需要切换到正则表达式,因为我们要删除这些标签,匹配的内容直接替换为空,所以“替换为”这里不用填写任何东西。最后选择全部替换即可。

    另外一个替换的示例,这里我们通过java代码来实现。

    假设我们有一个字符串如下所示:

[{"name":"buejee","id":101,"email":[],"mobile":"15909062001"},{"name":"lucky","id":102,"email":["haha@sina.com"],"mobile":"15909062002"}]

    这里虽然是一个json格式,但是它本身是作为一个字符串存在的,我们需要删除email这个部分。上面的示例里面有两个email,分别是 "email":[],   和  "email":["haha@sina.com"], 。为了将他们都去掉,我们的正则可以考虑这样写:

"email":\[[^\]]*\], 

    其中[^\]]*表示的是[]内部不能出现 ],这里的*表示内容可以有多个字符,也可以没有,匹配[]["haha@sina.com"]。另外,因为 "[" 和 "]" 本身是正则里面的关键字符号,所以这里需要转义。在java中,转义符号是两个反斜杠\\

    程序代码如下:

package com.xxx.reg;

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class StringReplace {
    public static void main(String[] args) {
        String str = "[{\"name\":\"buejee\",\"id\":101,\"email\":[],\"mobile\":\"15909062001\"},{\"name\":\"lucky\",\"id\":102,\"email\":[\"haha@sina.com\"],\"mobile\":\"15909062002\"}]";
        Pattern pattern = Pattern.compile("\"email\":\\[[^\\]]*\\],");
        Matcher matcher = pattern.matcher(str);
        System.out.println(str);
        String result = matcher.replaceAll("");
        System.out.println(result);
    }
}

    运行结果:

     打印结果正好删除了email部分。

    这两个示例有相同的部分,就是删除的内容需要进行一个过滤,不能贪婪匹配,否则就达不到效果,使用正则中的[^]语法来限制不能出现某个特定的标志。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值