一个Java正则匹配需求

      最近都是需求驱动学习,自己要从一张网页内容里抓一些东西,需要通过正则来匹配,顺便把Java正则搜出来看一下,写写完成需求的过程。

      文本内容大致为一张网页里,需要抓出

<a href="http://asfasf.safasf.asfasf"><img src="http://asfasf.asfasf.asfas" name="safaskfjl" /></a>

以上文本里的三段引号里的内容,由于不需要考虑性能,自己就用正则了,原以为比较简单,结果遇到一些小问题,查阅了一些资料,顺便就写写正则匹配吧。

      匹配符号就不说了,常用的都背下来了,Linux中常用到。Java中有几种不同的匹配方式,贪婪,懒惰和侵占,默认是贪婪匹配。举例:aabbacbaeb

贪婪匹配:a.*b匹配所有

懒惰匹配:a.*?b配以匹配aab,acb,aeb

侵占匹配:a.*+b则所有字符串都被.*优先匹配并吃掉,结果b无法匹配出现匹配为空

于是用懒惰匹配,把需要匹配的内容改成变量,于是很快写出:<a\\shref=\"(.*?)\"><img\\ssrc=\"(.*?)\"\\sname=\"(.*?)\"\\s/></a>

将以上内容匹配一张网页发现匹配有问题,网页上如果只出现单个的链接内容如<a href="http://asffsa.fsafsa.ffsa">asaf</a>于是就2掉了,前置会优先匹配<a href=",然后(.*?)会匹配之间到下一个"><img src="里的所有内容。由于直接拿了网页内容来测试,匹配的内容稀奇古怪,刚开始还没找到原因。于是晚上搜资料,怎么会用错了呢,思路也在考虑href后匹配><img就可以了,但是没有这样的指定方法,后来想到了可能是.*?将太多无用的内容给匹配掉了。于是改写为<a\\shref=\"(http://[A-Za-z0-9\\./]+?)\"><img\\ssrc=\"(.*?)\"\\sname=\"(.*?)\"\\s/></a>,这样就不至于被一些其他链接内容干扰。排查共花了1个多小时,期间看了各种正则的资料。还是挺有收获的。

总结,正则表达式是程序猿必备技能阿,还是需要系统的学习一遍的,建议边干边学。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值