java 正则 懒惰_正则表达式的最大最小原则(就是懒惰和贪婪定理),java版本

今天问了老大,学了一个新名词,其实文章里面有,我没有仔细看,叫做懒惰和贪婪定理.原文如下

当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。

有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。现在看看懒惰版的例子吧:

a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。

总之就是.*是找最远的两端的内容

.*?是找最近的两端的内容

JsonUtil json=new JsonUtil();

String content=json.getJson("某个网址");//通过url读取整个静态页面的内容

content=content.replace("\\r\\n","");//这里要注意要把所有的换行符去掉,因为.*通配符不能匹配换行符

String str="id=\"ReplaceSpot_three_tag\".*?table+.*?table+.*?>(.+?)table";

//首先是id为ReplaceSpot_three_tag紧跟着.*?table表示匹配到最近的一个table的内容同样后面也是匹配到最近的 一个table结束的>括号里面是目标内容+表示必须出现的内容同样是最近到下一个table出现.

Pattern p = Pattern.compile(str);

Matcher m = p.matcher(content);

while (m.find()) {

String con=m.group(1);//这样就能拿到table下的所有tr

System.out.println(con);

String path="

(.+?)";//这里匹配所有tr里面的内容,因为有很多tr,所以下面会循环输出tr里卖弄的内容

Pattern ps = Pattern.compile(path);

Matcher ms = ps.matcher(con);

while (ms.find()) {

System.out.println(ms.group(1));

}

}

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值