万能正则公式 获取两个字符串之间的字符串 适应大多数场景

1 篇文章 0 订阅

万能正则公式 获取两个字符串之间的字符串

本表达式适用的场景是比较小的爬虫,需要快速编写测试的时候用的,速度肯定会比常规经过优化的正则表达式慢.如果对解析速度有要求的话,建议使用Jsoup对html进行解析或者写常规的正则语句进行解析.

如需详细的正则教程,建议直接翻文档

菜鸟教程-正则表达式**

表达式

(.*?)

  • 括号的意思就是要取的字符串
  • 英文句号表示任意字符
  • *号表示前一个出现0或者无数次
  • ?号的意思是非贪婪抓取(去掉的话只会返回最远端的尾部)
    总结起来就是 非贪婪地抓取任意字符出现0到无数次 需要获取哪里就把这个插到哪里

看个例子,我需要获取 url 和 123 两个字段

String text = "<a herf=\"url\">123<a>"
Pattern p = Pattern.compile("<a herf=\"(.*?)\">(.*?)<a>");
Matcher m = p.matcher(html);
while(m.find()){//每调用一次都会返回一个
System.out.println(m.group(0));//0是抓取到的整一段,所以数组从1开始
String url = m.group(1);
String title = m.group(2);
}

扩展一下

假如我想要的有可能没有,这样的话就适配不了.我们可以在外面再加一个括号

String text = "<p id=\"title\">标题</p><a herf=\"url\">123<a><div id=\"banner\"></div>"
Pattern p = Pattern.compile("<p id=\"title\">(.*?)</p>(<a herf=\"(.*?)\">(.*?)<a>)?<div id=\"(.*?)\"></div>");
Matcher m = p.matcher(html);
while(m.find()){//每调用一次都会返回一个
System.out.println(m.group(0));//0是抓取到的整一段,所以数组从1开始
String url = m.group(1);
String title = m.group(2);
}
<p id=\"title\">标题</p><a herf=\"url\">123<a><div id=\"banner\"></div>
<p id=\"title\">标题</p><div id=\"banner\"></div>

a标签有可能在有可能不在,如果不在的话我们的(.*?)肯定匹配不到,所以其他信息也匹配不到了,这里我们在a标签外围也加一个()? 这样无论他在不在我们也可以匹配到其他了.

再说一遍本表达式适用的场景是需要快速编写爬虫测试的时候用的,如果要快的话,可以了解一下Jsoup或者正则的优化,写出更快解析的代码.冲冲冲!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值