正则问题 m.groupCount() 和 m.find() 本帖最后由 lpy3654321 于 2012-03-18 02:00:56 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你要的效果 String str = "15812345131s15812345672a15812345133s15812345674a15812345135s15812345676a"; Pattern p = Pattern.compile("1[358]\\d{9}"); Matcher m = p.matcher(str); while(m.find()){ System.out.println(m.group()); m.find(); } 问题一:groupCount指的是一次匹配中捕获组的个数,你的正则中又没有捕获组,当然是0了问题二:因为前面的if(m.find())已经把第一个匹配结果取到了,你在while(m.find())时,实际上已经是从第二个匹配开始循环了,你把上面的if(m.find())注释掉就能看到了另外,你写的手机的正则是错的 这个正则是在我一个PDF上弄下来了。 String str = "15812345131s15812345672a15812345133s15812345674a15812345135s15812345676a"; Pattern p7 = Pattern.compile("1[358]\\d{9}"); Matcher m7 = p7.matcher(str); int count = 1; while(m7.find()){ System.out.println("第"+(count++)+"个"+m7.group()); // m7.find(); } System.out.println("共"+(count-1)+"个"); 你数数左括号有几个就行了,不过得把左括号后面带问号“(?”这种给排除掉比如:(abc(def)g(hi)jk)lmn(op(?:qrst)uvwx)yz这里会有 4 个捕获组 捕获组不是给你用来输出第几个的,呵呵,如果要按你的要求来的话,得这样做,但这样做没有任何意义!import java.util.regex.Matcher;import java.util.regex.Pattern;public class RegexTest { public static void main(String[] args) { String str = "15812345131s15812345672a15812345133s15812345674a" + "15812345135s15812345676as13312345644"; String regex = "(1[3458][0-9]{9}).*(1[3458][0-9]{9}).*" + "(1[3458][0-9]{9}).*(1[3458][0-9]{9}).*" + "(1[3458][0-9]{9}).*(1[3458][0-9]{9}).*" + "(1[3458][0-9]{9}).*"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(str); System.out.println("groupCount: " + matcher.groupCount()); int count = matcher.groupCount(); while (matcher.find()) { for (int i = 1; i <= count; i++) { if (matcher.start(i) > -1) { System.out.println("group " + i + ": " + matcher.group(i)); } } } }} 真是无语了,2楼给你的代码,难道就不能自己去输出看下结果吗String str = "15812345131s15812345672a15812345133s15812345674a15812345135s15812345676a";Pattern p = Pattern.compile("1[358]\\d{9}");Matcher m = p.matcher(str); while(m.find()){ System.out.println(m.group()); m.find();}/*-----输出-----158123451311581234513315812345135*/看尾号,这难道不是你要的效果吗你的需求和捕获没半毛钱关系,为什么非要纠结于groupCount是多少呢 紧急求救,JAVA C++ DES加密解密 能给点学习JAVA的好的项目吗 关于线程Thread有几个问题实在想不明白 tomcat5无法编译jsp?!!! 请问一下同步和并发有何不同 java静态变量问题 高分求解:JBuilder中的jdbTable 高分求解 jni 问题 小白在自学过程中遇到问题了,请各位大佬指导 这是什么格式?我给忘了,求速回 小菜鸟求助 新人,求助个简单的问题
Pattern p = Pattern.compile("1[358]\\d{9}");
Matcher m = p.matcher(str);
while(m.find()){
System.out.println(m.group());
m.find();
}
String str = "15812345131s15812345672a15812345133s15812345674a15812345135s15812345676a";
Pattern p7 = Pattern.compile("1[358]\\d{9}");
Matcher m7 = p7.matcher(str);
int count = 1;
while(m7.find()){
System.out.println("第"+(count++)+"个"+m7.group());
// m7.find();
}
System.out.println("共"+(count-1)+"个");
比如:(abc(def)g(hi)jk)lmn(op(?:qrst)uvwx)yz这里会有 4 个捕获组
import java.util.regex.Pattern;public class RegexTest { public static void main(String[] args) { String str = "15812345131s15812345672a15812345133s15812345674a" +
"15812345135s15812345676as13312345644"; String regex = "(1[3458][0-9]{9}).*(1[3458][0-9]{9}).*" +
"(1[3458][0-9]{9}).*(1[3458][0-9]{9}).*" +
"(1[3458][0-9]{9}).*(1[3458][0-9]{9}).*" +
"(1[3458][0-9]{9}).*"; Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
System.out.println("groupCount: " + matcher.groupCount());
int count = matcher.groupCount();
while (matcher.find()) {
for (int i = 1; i <= count; i++) {
if (matcher.start(i) > -1) {
System.out.println("group " + i + ": " + matcher.group(i));
}
}
}
}
}
真是无语了,2楼给你的代码,难道就不能自己去输出看下结果吗String str = "15812345131s15812345672a15812345133s15812345674a15812345135s15812345676a";
Pattern p = Pattern.compile("1[358]\\d{9}");
Matcher m = p.matcher(str);
while(m.find()){
System.out.println(m.group());
m.find();
}
/*-----输出-----
15812345131
15812345133
15812345135
*/
看尾号,这难道不是你要的效果吗你的需求和捕获没半毛钱关系,为什么非要纠结于groupCount是多少呢