您的位置:程序门 -> java -> j2se / 基础类



正则表达式问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


正则表达式问题[已结贴,结贴人: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


我一直分不清这些预搜索
谁给我讲讲这样写有什么区别?
我只能分清把(? <=)   这样的放在左边     (?=)   这样的放在右边
可是现在是把(? <=)放在了右边我就分不清了   谢谢回答!
发表于:2007-08-10 09:57:501楼 得分:0
pattern   pattern   =   pattern.compile( ".+?(? <=\\d{2}) ");
string   str   =   "abc57ab344bv22222 ";
matcher   matcher=   pattern.matcher(str)
while(matcher.find())
{system.out.println(matcher.group());}
发表于:2007-08-10 14:31:372楼 得分:20
其实可以不用管.+?,只要知道是非贪婪匹配就好了
".+?(? <=\\d{2}) "
你只要找到有两个数字就可以了,记住预搜索本身是不在匹配序列里面的
"abc57ab785bv55555 "
找到数字57,所以abc57能匹配。.+?是abc57,预搜索能找到57
找到数字78,所以ab78能匹配,.+?匹配ab78,预搜索能找到78
注意,数字85也是能匹配的,因为是预搜索,所以不用考虑8是否已经在前面匹配了,所以这里只是输出5,.+?是5,反向于搜索能找到85,不要认为是从5开始就行了,这就是预搜索
下面的类似,所以有很多单个的5,其实预搜索是搜到两个5的,前面的一个5已经匹配了,所以下一个只输出一个5

发表于:2007-08-10 15:52:023楼 得分:0
学习
发表于:2007-08-10 16:01:264楼 得分:0
关注


快速检索

最新资讯
热门点击