源文件内容:label-switched-path To-R5 {
    from 1.1.1.1;
    to 5.5.5.5;
    revert-timer 600;
    no-decrement-ttl;
    retry-timer 100;
    retry-limit 100;
    primary PE15-s1;
    primary R5-s1;
    secondary R5-s2 {
        select manual;
        standby;
    }
    secondary R5-s3;
}求primary 和secondary后面的名称,红色粗体部分
注意:一行的最后结尾有两种方式,以{结尾,或者;结尾。附:验证程序
public static void main(String args[]) {
String str =
"label-switched-path To-R5 {\n"+
"    from 1.1.1.1;\n"+
"    to 5.5.5.5;\n"+
"    revert-timer 600;\n"+
"    no-decrement-ttl;\n"+
"    retry-timer 100;\n"+
"    retry-limit 100;\n"+
"    primary PE15-s1;\n"+
"    primary R5-s1;\n"+
"    secondary R5-s2 {\n"+
"        select manual;\n"+
"        standby;\n"+
"    }\n"+
"    secondary R5-s3;\n"+
"}\n"+
"secondary R5-s2 {\n"+
"secondary R5-s3;\n";
String reg = "primary (.+)|secondary (.+)"; Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
}

解决方案 »

  1.   

    lz的可以了 换成matcher.group()
      

  2.   


    public static void main(String args[]) {
    String str = "label-switched-path To-R5 {\n" 
    + " from 1.1.1.1;\n"
    + " to 5.5.5.5;\n" 
    + " revert-timer 600;\n"
    + " no-decrement-ttl;\n" 
    + " retry-timer 100;\n"
    + " retry-limit 100;\n" 
    + " primary PE15-s1;\n"
    + " primary R5-s1;\n" 
    + " secondary R5-s2 {\n"
    + " select manual;\n" 
    + " standby;\n" + " }\n"
    + " secondary R5-s3;\n" 
    + "}\n" 
    + "secondary R5-s2 {\n"
    + "secondary R5-s3;\n";
    String reg = "(primary |secondary )(.+?)(?=[; {])";
    Pattern pattern = Pattern.compile(reg);
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
    System.out.println(matcher.group(2));
    }
    }
      

  3.   

    实际你有2个括号,2个groupString reg = "primary (.+);|secondary (.+)[{;]"; Pattern pattern = Pattern.compile(reg);
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
    if(null == matcher.group(1))
    System.out.println(matcher.group(2));
    else
    System.out.println(matcher.group(1));
    }
      

  4.   

    或者:import java.io.*;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class Forest implements Serializable{
    public static void main(String args[]) {
    String str =
    "label-switched-path To-R5 {\n"+
    " from 1.1.1.1;\n"+
    " to 5.5.5.5;\n"+
    " revert-timer 600;\n"+
    " no-decrement-ttl;\n"+
    " retry-timer 100;\n"+
    " retry-limit 100;\n"+
    " primary PE15-s1;\n"+
    " primary R5-s1;\n"+
    " secondary R5-s2 {\n"+
    " select manual;\n"+
    " standby;\n"+
    " }\n"+
    " secondary R5-s3;\n"+
    "}\n"+
    "secondary R5-s2 {\n"+
    "secondary R5-s3;\n";
    String reg = "(?<=primary|secondary) (.+)[{;]"; Pattern pattern = Pattern.compile(reg);
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
    System.out.println(matcher.group(1));
    }
    }
    }
      

  5.   

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    public class Test { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    String str =
     "label-switched-path To-R5 {\n"+
     " from 1.1.1.1;\n"+
     " to 5.5.5.5;\n"+
     " revert-timer 600;\n"+
     " no-decrement-ttl;\n"+
     " retry-timer 100;\n"+
     " retry-limit 100;\n"+
     " primary PE15-s1;\n"+
     " primary R5-s1;\n"+
     " secondary R5-s2 {\n"+
     " select manual;\n"+
     " standby;\n"+
     " }\n"+
     " secondary R5-s3;\n"+
     "}\n"+
     "secondary R5-s2 {\n"+
     "secondary R5-s3;\n";
     String reg = "(primary|secondary)(.*)(;|\\{)";  Pattern pattern = Pattern.compile(reg);
     Matcher matcher = pattern.matcher(str);
     while (matcher.find()) {
     System.out.println(matcher.group(2));
     }
     
    }}
      

  6.   


    非常感谢,其他人都没有注意到结尾的空格。结果:
    PE15-s1
    R5-s1
    R5-s2
    R5-s3
    R5-s2
    R5-s3