public static void main(String args[])
{
   System.out.println(getRegExpValByIdx("[0-9]+","%$^%11  12113$Goodfdf678())",2));
}public static String getRegExpValByIdx(String regExp,String oriStr,int idx)
{      
Pattern p=Pattern.compile(regExp);
Matcher matcher=p.matcher(oriStr);
matcher.start(idx);
String result=null;
if(matcher.find(idx))
   result=matcher.group();
return result;
}这个getRegExpValByIdx是想返回第idx个匹配的字符串, 无论idx参数设为什么,都只返回第一个匹配的的字符串.

解决方案 »

  1.   

    blog 更新:
     think in java 各章后练习答案.....
     http://blog.csdn.net/heimaoxiaozi/
      

  2.   

    public static String getRegExpValByIdx(String regExp, String oriStr, int idx) {
        Pattern p = Pattern.compile(regExp);
        Matcher matcher = p.matcher(oriStr);
       // matcher.start(idx); 在分组的模式下,此方法是返回以前匹配的匹配操作期间,由给定组所捕获的子序列的初始索引。
        String result = null;
        for(int i=0;matcher.find();i++){
          if(i==idx){
            result = matcher.group();
          }
        }
        return result;
      }
      

  3.   

    javaglory (我有准时结贴给分的好习惯)     
    ===================================
    这个名字起得好
      

  4.   

    以下:
    public static void main(String args[])
    {
       System.out.println(getRegExpValByIdx("[0-9]+","%$^%11  12113$Goodfdf678())",3));
    }public static String getRegExpValByIdx(String regExp,String oriStr,int idx)
    {      
        Pattern p=Pattern.compile(regExp);
        Matcher matcher=p.matcher(oriStr);    String result=null;
        int index = 1;
        while(matcher.find()){
            if(idx == index){
                result=matcher.group();
                break;
            }
            index++;
        }
        return result;
    }
      

  5.   

    程序就可以运行了,但是不明白Matcher.start(int idx)的作用,"在分组的模式下,此方法是返回以前匹配的匹配操作期间,由给定组所捕获的子序列的初始索引"。可能我语文差,理解不到这句的意思.
      

  6.   

    一个正则表达式,默认整个表达式算一个组,其余每对括号算一个组,每次匹配完之后,就会有若干个匹配组,start(int idx)返回的是相应组的起始索引.比如一个正则表达式1(23)(45)存在3个组,整体是0组,(23)是1组,(45)是2组,对12345进行匹配,start(0)返回12345的起始索引0,start(1)返回23起始索引1,start(2)返回45索引3.