读书人

正则表达式有关问题

发布时间: 2012-04-01 17:23:46 作者: rapoo

正则表达式问题
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

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

读书人网 >J2SE开发

热点推荐