匹配到了9组
下面是java代码 运行环境是android studio
String str = "{\"result\":\"success\",\"msg\":null,\"object\":{\"iTotalRecords\":\"9\",\"iTotalDisplayRecords\":\"9\",\"iDisplayStart\":\"0\",\"iDisplayLength\":\"-1\",\"sEcho\":\"1\",\"sSearch\":null,\"aaData\":[{\"xh\":\"201400122087\",\"xm\":\"\",\"bm\":\"电科14\",\"xsh\":\"12\",\"kch\":\"sd01220620\",\"kxh\":0,\"xnxq\":\"2015-2016-2\",\"qmcj\":\"85.0\",\"pscj\":100.0,\"lrzt\":\"确定\",\"sycj\":0.0,\"qzcj\":0.0,\"kscj\":90.0,\"kccj\":null,\"kssj\":\"20160627\",\"cxbkbz\":null,\"bz\":null,\"djm\":null,\"sfjscj\":\"0\",\"xsjc\":\"信息学院\",\"zczt\":\"未\",\"jsm\":\"孙丰荣2\",\"jsh\":\"120128\",\"kkxsh\":\"12\",\"kcm\":\"概率统计\",\"xs\":48.0,\"xf\":3.0,\"kcsx\":\"必修\",\"kscjView\":\"90.0\",\"sycjView\":\"0.0\",\"pscjView\":\"100.0\",\"qzcjView\":\"0.0\",\"qmcjView\":\"85.0\",\"id\":null},{\"xh\":\"201400122087\",\"xm\":\"\",\"bm\":\"电科14\",\"xsh\":\"12\",\"kch\":\"sd01221810\",\"kxh\":2,\"xnxq\":\"2015-2016-2\",\"qmcj\":\"74\",\"pscj\":85.0,\"lrzt\":\"确定\",\"sycj\":0.0,\"qzcj\":0.0,\"kscj\":78.0,\"kccj\":null,\"kssj\":\"20160627\",\"cxbkbz\":null,\"bz\":null,\"djm\":null,\"sfjscj\":\"0\",\"xsjc\":\"信息学院\",\"zczt\":\"未\",\"jsm\":\"杨旭东2\",\"jsh\":\"120110\",\"kkxsh\":\"12\",\"kcm\":\"微处理器原理与应用\",\"xs\":48.0,\"xf\":3.0,\"kcsx\":\"必修\",\"kscjView\":\"78.0\",\"sycjView\":\"0.0\",\"pscjView\":\"85.0\",\"qzcjView\":\"0.0\",\"qmcjView\":\"74\",\"id\":null},{\"xh\":\"201400122087\",\"xm\":\"\",\"bm\":\"电科14\",\"xsh\":\"12\",\"kch\":\"sd01221820\",\"kxh\":2,\"xnxq\":\"2015-2016-2\",\"qmcj\":\"71\",\"pscj\":82.0,\"lrzt\":\"确定\",\"sycj\":0.0,\"qzcj\":0.0,\"kscj\":79.0,\"kccj\":null,\"kssj\":\"20160627\",\"cxbkbz\":null,\"bz\":null,\"djm\":null,\"sfjscj\":\"0\",\"xsjc\":\"信息学院\",\"zczt\":\"未\",\"jsm\":\"杨旭东2\",\"jsh\":\"120110\",\"kkxsh\":\"12\",\"kcm\":\"微处理器原理与应用实验\",\"xs\":48.0,\"xf\":1.5,\"kcsx\":\"必修\",\"kscjView\":\"79.0\",\"sycjView\":\"0.0\",\"pscjView\":\"82.0\",\"qzcjView\":\"0.0\",\"qmcjView\":\"71\",\"id\":null},{\"xh\":\"201400122087\",\"xm\":\"\",\"bm\":\"电科14\",\"xsh\":\"12\",\"kch\":\"sd01230400\",\"kxh\":1,\"xnxq\":\"2015-2016-2\",\"qmcj\":\"62\",\"pscj\":100.0,\"lrzt\":\"确定\",\"sycj\":0.0,\"qzcj\":0.0,\"kscj\":73.0,\"kccj\":null,\"kssj\":\"20160627\",\"cxbkbz\":null,\"bz\":null,\"djm\":null,\"sfjscj\":\"0\",\"xsjc\":\"信息学院\",\"zczt\":\"未\",\"jsm\":\"李涛\",\"jsh\":\"120236\",\"kkxsh\":\"12\",\"kcm\":\"电动力学\",\"xs\":48.0,\"xf\":3.0,\"kcsx\":\"必修\",\"kscjView\":\"73.0\",\"sycjView\":\"0.0\",\"pscjView\":\"100.0\",\"qzcjView\":\"0.0\",\"qmcjView\":\"62\",\"id\":null},{\"xh\":\"201400122087\",\"xm\":\"\",\"bm\":\"电科14\",\"xsh\":\"12\",\"kch\":\"sd01230930\",\"kxh\":0,\"xnxq\":\"2015-2016-2\",\"qmcj\":\"92\",\"pscj\":0.0,\"lrzt\":\"确定\",\"sycj\":0.0,\"qzcj\":0.0,\"kscj\":92.0,\"kccj\":null,\"kssj\":\"20160627\",\"cxbkbz\":null,\"bz\":null,\"djm\":null,\"sfjscj\":\"0\",\"xsjc\":\"信息学院\",\"zczt\":\"未\",\"jsm\":\"刘兆军3\",\"jsh\":\"120201\",\"kkxsh\":\"12\",\"kcm\":\"光学课程设计\",\"xs\":2.0,\"xf\":2.0,\"kcsx\":\"必修\",\"kscjView\":\"92.0\",\"sycjView\":\"0.0\",\"pscjView\":\"0.0\",\"qzcjView\":\"0.0\",\"qmcjView\":\"92\",\"id\":null},{\"xh\":\"201400122087\",\"xm\":\"\",\"bm\":\"电科14\",\"xsh\":\"12\",\"kch\":\"sd01232210\",\"kxh\":0,\"xnxq\":\"2015-2016-2\",\"qmcj\":\"41\",\"pscj\":30.0,\"lrzt\":\"确定\",\"sycj\":0.0,\"qzcj\":0.0,\"kscj\":71.0,\"kccj\":null,\"kssj\":\"20160627\",\"cxbkbz\":null,\"bz\":null,\"djm\":null,\"sfjscj\":\"0\",\"xsjc\":\"信息学院\",\"zczt\":\"未\",\"jsm\":\"戚焕筠\",\"jsh\":\"120166\",\"kkxsh\":\"12\",\"kcm\":\"应用光学\",\"xs\":32.0,\"xf\":2.0,\"kcsx\":\"必修\",\"kscjView\":\"71.0\",\"sycjView\":\"0.0\",\"pscjView\":\"30.0\",\"qzcjView\":\"0.0\",\"qmcjView\":\"41\",\"id\":null},{\"xh\":\"201400122087\",\"xm\":\"\",\"bm\":\"电科14\",\"xsh\":\"12\",\"kch\":\"sd01232260\",\"kxh\":0,\"xnxq\":\"2015-2016-2\",\"qmcj\":\"76\",\"pscj\":95.0,\"lrzt\":\"确定\",\"sycj\":0.0,\"qzcj\":0.0,\"kscj\":82.0,\"kccj\":null,\"kssj\":\"20160627\",\"cxbkbz\":null,\"bz\":null,\"djm\":null,\"sfjscj\":\"0\",\"xsjc\":\"信息学院\",\"zczt\":\"未\",\"jsm\":\"丛振华5\",\"jsh\":\"120226\",\"kkxsh\":\"12\",\"kcm\":\"原子物理\",\"xs\":32.0,\"xf\":2.0,\"kcsx\":\"必修\",\"kscjView\":\"82.0\",\"sycjView\":\"0.0\",\"pscjView\":\"95.0\",\"qzcjView\":\"0.0\",\"qmcjView\":\"76\",\"id\":null},{\"xh\":\"201400122087\",\"xm\":\"\",\"bm\":\"电科14\",\"xsh\":\"12\",\"kch\":\"sd02810150\",\"kxh\":325,\"xnxq\":\"2015-2016-2\",\"qmcj\":\"53\",\"pscj\":28.0,\"lrzt\":\"确定\",\"sycj\":0.0,\"qzcj\":0.0,\"kscj\":81.0,\"kccj\":null,\"kssj\":\"20160627\",\"cxbkbz\":null,\"bz\":null,\"djm\":null,\"sfjscj\":\"0\",\"xsjc\":\"信息学院\",\"zczt\":\"未\",\"jsm\":\"纪政文3\",\"jsh\":\"280001\",\"kkxsh\":\"28\",\"kcm\":\"马克思主义原理\",\"xs\":58.0,\"xf\":3.0,\"kcsx\":\"必修\",\"kscjView\":\"81.0\",\"sycjView\":\"0.0\",\"pscjView\":\"28.0\",\"qzcjView\":\"0.0\",\"qmcjView\":\"53\",\"id\":null},{\"xh\":\"201400122087\",\"xm\":\"\",\"bm\":\"电科14\",\"xsh\":\"12\",\"kch\":\"sd02910660\",\"kxh\":514,\"xnxq\":\"2015-2016-2\",\"qmcj\":\"75\",\"pscj\":0.0,\"lrzt\":\"确定\",\"sycj\":0.0,\"qzcj\":0.0,\"kscj\":75.0,\"kccj\":null,\"kssj\":\"20160627\",\"cxbkbz\":null,\"bz\":null,\"djm\":null,\"sfjscj\":\"0\",\"xsjc\":\"信息学院\",\"zczt\":\"未\",\"jsm\":\"徐剑波3\",\"jsh\":\"290023\",\"kkxsh\":\"29\",\"kcm\":\"体育(4)\",\"xs\":32.0,\"xf\":1.0,\"kcsx\":\"必修\",\"kscjView\":\"75.0\",\"sycjView\":\"0.0\",\"pscjView\":\"0.0\",\"qzcjView\":\"0.0\",\"qmcjView\":\"75\",\"id\":null}]}} " ;
str =str.replace("/n",""); // 去除换行符
str =str.replace("/r",""); // 出去回车符,这两行我不知道有没有用,先加上了
String reg="(?<=kcm\":\")\\w+?.{0,10}(?=\",\"xs\")"; //反斜杠已经正确加上了
RegularMatcher(str,reg);
public void RegularMatcher(String str, String reg) {
Pattern pat = Pattern.compile(reg,Pattern.DOTALL);
Matcher mat = pat.matcher(str);
boolean rs = mat.find();
Log.d("dosome", String.valueOf(rs));
Log.d("dosome", String.valueOf(mat.groupCount()));
Log.d("dosome", mat.group(0));
List<String> resultStrs = new ArrayList<String>();
while(mat.find()){
resultStrs.add(mat.group());
}
for (String string : resultStrs) {
Log.d("dosome", string);
}
}
结果
rs==true;
mat.groupCount()==0; //为什么会等于0 正则测试明明匹配到了九组
mat.group()==“概率统计”;//这个不应该是得到所有匹配到的字符串吗
Log.d("dosome", string); //如果是这个 输出的就是
07-19 04:50:01.351 8792-8792/com.example.an.regular_test D/dosome: 微处理器原理与应用
07-19 04:50:01.351 8792-8792/com.example.an.regular_test D/dosome: 微处理器原理与应用实验
07-19 04:50:01.351 8792-8792/com.example.an.regular_test D/dosome: 电动力学
07-19 04:50:01.351 8792-8792/com.example.an.regular_test D/dosome: 光学课程设计
07-19 04:50:01.351 8792-8792/com.example.an.regular_test D/dosome: 应用光学
07-19 04:50:01.351 8792-8792/com.example.an.regular_test D/dosome: 原子物理
07-19 04:50:01.351 8792-8792/com.example.an.regular_test D/dosome: 马克思主义原理
07-19 04:50:01.351 8792-8792/com.example.an.regular_test D/dosome: 体育(4)
正好少了第一组 也就是前面mat.group()的那组
这是为什么啊,新手可能语言组织得不好,求大神解答啊,困扰了我很久了
2 个解决方案
#1
好好读一下API吧. Matcher的 group这个东西是有点奇怪的..
#2
boolean rs = mat.find();
当你调用这一句的时候实际上已经是让match在str中的起始位置跳过了第一个了.
String regex = "(?<=\"kcm\":\")(?<course>[^\"]+)";
Matcher matcher = Pattern.compile(regex).matcher(str);
while(matcher.find()){
System.out.println(matcher.group("course"));
}
所以要获取全部的话得直接用while来循环所有或者在当你调用
的时候就线预存第一个,然后用后面的while来存储后面的匹配内容
boolean rs = mat.find();
#1
好好读一下API吧. Matcher的 group这个东西是有点奇怪的..
#2
boolean rs = mat.find();
当你调用这一句的时候实际上已经是让match在str中的起始位置跳过了第一个了.
String regex = "(?<=\"kcm\":\")(?<course>[^\"]+)";
Matcher matcher = Pattern.compile(regex).matcher(str);
while(matcher.find()){
System.out.println(matcher.group("course"));
}
所以要获取全部的话得直接用while来循环所有或者在当你调用
的时候就线预存第一个,然后用后面的while来存储后面的匹配内容
boolean rs = mat.find();