正则表达式问题

joejoe1991 2007-08-10 09:34:06
Pattern pattern=Pattern.compile(".+?(?<=\\d{2})");
String str="abc57ab785bv55555";
Matcher matcher=pattern.matcher(str);

while(matcher.find())
{
System.out.println(matcher.group());
}

结果:
abc57
ab78
5
bv55
5
5
5
====================================================================
Pattern pattern=Pattern.compile(".+?(?=\\d{2})");
String str="abc57ab785bv55555";
Matcher matcher=pattern.matcher(str);

while(matcher.find())
{
System.out.println(matcher.group());
}
结果:
abc
57ab
7
85bv
5
5
5



我一直分不清这些预搜索
谁给我讲讲这样写有什么区别?
我只能分清把(?<=) 这样的放在左边 (?=) 这样的放在右边
可是现在是把(?<=)放在了右边我就分不清了 谢谢回答!
...全文
174 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenhongxin 2007-08-10
  • 打赏
  • 举报
回复
Pattern pattern = Pattern.compile(".+?(?<=\\d{2})");
String str = "abc57ab344bv22222";
Matcher matcher= pattern.matcher(str)
while(matcher.find())
{System.out.println(matcher.group());}
mybestdzw 2007-08-10
  • 打赏
  • 举报
回复
关注
jianghuxiaoxiami 2007-08-10
  • 打赏
  • 举报
回复
学习
believefym 2007-08-10
  • 打赏
  • 举报
回复
其实可以不用管.+?,只要知道是非贪婪匹配就好了
".+?(?<=\\d{2})"
你只要找到有两个数字就可以了,记住预搜索本身是不在匹配序列里面的
"abc57ab785bv55555"
找到数字57,所以abc57能匹配。.+?是abc57,预搜索能找到57
找到数字78,所以ab78能匹配,.+?匹配ab78,预搜索能找到78
注意,数字85也是能匹配的,因为是预搜索,所以不用考虑8是否已经在前面匹配了,所以这里只是输出5,.+?是5,反向于搜索能找到85,不要认为是从5开始就行了,这就是预搜索
下面的类似,所以有很多单个的5,其实预搜索是搜到两个5的,前面的一个5已经匹配了,所以下一个只输出一个5

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧