首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

正则表达式有关问题

2012-04-01 
正则表达式问题importjava.util.regex.*publicclassSort{publicstaticvoidmain(String[]args){Patternpn

正则表达式问题
import   java.util.regex.*;

public   class   Sort   {
public   static   void   main(String[]   args)   {
Pattern   p=null;
Matcher   m=null;
boolean   b;
String   s=null;
p=Pattern.compile( "a*b ");
m=p.matcher( "abbbbbbbb ");  
b=m.matches();
System.out.println(b);

p=Pattern.compile( "a*b ");
m=p.matcher( "abbababadbb ");
s=m.replaceAll( "d ");
System.out.println(s);
}
}
结果是b为false。s为ddddaddd。怎么来的??
a*b是不是只包含ab,aab,aaab,aaaab.....这些?
s是怎么匹配来的没看懂。


[解决办法]
m=p.matcher( "abbababadbb ");
拆分:
abbababadbb
ab = d
b = d
ab = d
ab = d
a = a
d = d
b = d

注意你中间有个字串是 ad 是无法匹配的, 因为 b 是必须的.
b = d
[解决办法]
刚才的中文应该打在最后 b = d 后面 ^_^
[解决办法]
注意在正则表达式中 "* "号的意思是 > = 0 个.也就是说他也可以匹配 "b "
"abbababadbb " 匹配中应该是这样分的ab b ab ab ad b b 进行匹配的其中的 "ad "没有匹配

而b=m.matches();则尝试进行全文匹配
[解决办法]
第一个为false是因为,a*b代表的String是 前面0到无数个a,然后后面一个b
b,ab,aab,aaab,...

第二个的依次置换过程是
abbababadbb
dbababadbb
ddababadbb
dddabadbb
ddddadbb
ddddaddb
ddddaddd

程序没有欺骗你,结果是对的。

热点排行