String s1="Jul  1 08:33:59 10.1.22.156 809642: Jul  1 08:33:57 CST: %LINK-3-UPDOWN: Interface GigabitEthernet1/0/17, changed state to down";

System.out.println(s1.replaceAll(".*?(\\d+\\..*?)\\s.*%(.*?):\\s?(.*?),.*", "$1-->$2-->$3"));

解决方案 »

  1.   

    看错了。
    String s1="Jul  1 08:33:59 10.1.22.156 809642: Jul  1 08:33:57 CST: %LINK-3-UPDOWN: Interface GigabitEthernet1/0/17, changed state to down";
    System.out.println(s1.replaceAll(".*?(\\d+\\..*?)\\s.*%(.*?):\\s?.*?\\s(.*?),.*", "\\$1="+"$1"+"\n\\$2="+"$2"+"\n\\$3="+"$3"));
      

  2.   

    to rui888  为什么我执行的结果还是打印源字符串呢?
      

  3.   

    如果取IP地址比较麻烦,可以不用,我的代码如下:
    String s = "Jul  1 08:33:59 JNP-BD2F-OAC37-1 809642: Jul  1 08:33:57 CST: LINK-3-UPDOWN: Interface GigabitEthernet1/0/17, changed state to down";
        
         String ret= s.replaceAll("^.*CST: ([0-9a-zA-Z]+): Interface ([0-9a-zA-Z]+).*down", "$1,$2"); 
         System.out.println(ret);可结果还是打印源字符串s,哪错了?
      

  4.   

    s.replaceAll("^.*CST: ([0-9a-zA-Z-]+): Interface ([0-9a-zA-Z/]+).*down", "$1,$2");
      

  5.   

    如果字符串里有(),比如Jul  1 08:33:59 JNP-BD2F-OAC37-1 809642: Jul  1 08:33:57 CST: LINK-3-UPDOWN: Interface (GigabitEthernet1/0/17), changed state to down这样怎么写正则表达式,还有如何判断有几个$变量?
      

  6.   

    to rui888
    换一个问法:如果将这些变量替换另一字符串中对应的变量。例如$1 intergace $2 is down
    怎么方便替换?谢谢了
      

  7.   

    就是将之前取到的值$1,$2,替换新字符串fstr="$1 intergace $2 is down",替换结果是 LINK-3-UPDOWN interface GigabitEthernet1/0/17 is down.
      

  8.   

    是这个 吗? String s = "Jul  1 08:33:59 JNP-BD2F-OAC37-1 809642: Jul  1 08:33:57 CST: LINK-3-UPDOWN: Interface GigabitEthernet1/0/17, changed state to down";
        
         String ret= s.replaceAll("^.*CST: ([0-9a-zA-Z-]+): Interface ([0-9a-zA-Z/]+).*down", "$1,$2"); 
         System.out.println(ret);
        
         String fstr="$1 intergace $2 is down";
         fstr=fstr.replace("$1", ret.split(",")[0]).replace("$2", ret.split(",")[1]);
         System.out.println(fstr);