Regexp在字符串中的两个单词之间获取值

时间:2016-05-04 13:22:58

标签: java android regex

我必须在Java中的字符串中获取两个单词之间的值,字符串是这样的:

convert

我需要得到:10.251.211.1

此IP始终介于From和icmp_seq之间。

我怎样才能用Java做到这一点? 我试着使用这段代码:

PING 151.92.198.78 (151.92.198.78) 56(84) bytes of data. 
From 10.251.211.1: icmp_seq=1 Time to live exceeded

但它不起作用。

5 个答案:

答案 0 :(得分:2)

正确的正则表达式将起到作用:

public static void main(String[] args) throws Exception {
    String s = "PING 151.92.198.78 (151.92.198.78) 56(84) bytes of data." + "\n"
            + "From 10.251.211.1: icmp_seq=1 Time to live exceeded";

    Pattern p = Pattern.compile(".*From\\s+(.*?):\\s+icmp_seq", Pattern.DOTALL);
     // pattern selects everything preceeded by "From" upto ":<space>icmp_seq"
    Matcher m = p.matcher(s);
    while(m.find()) {
        System.out.println(m.group(1));
    }

}

O / P:

10.251.211.1

答案 1 :(得分:1)

使用以下代码获取两个文本之间的IP

import java.util.regex.*;

class Main
{
  public static void main(String[] args)
  {
    String txt="From 10.251.211.1: icmp_seq=1 Time to live exceeded";

    String re1=".*?";   // Non-greedy match on filler
    String re2="((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))(?![\\d])"; // IPv4 IP Address 1

    Pattern p = Pattern.compile(re1+re2,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
    Matcher m = p.matcher(txt);
    if (m.find())
    {
        String ipaddress1=m.group(1);
        System.out.print("("+ipaddress1.toString()+")"+"\n");
    }
  }
}

答案 2 :(得分:0)

您只需将行改为:

final Pattern pattern = Pattern.compile("From ([0-9.]+): ");

另外,我尝试调试你的正则表达式,发现它匹配10.251.211.1:而不是10.251.211.1,因为:也找到.,即我的意思是要说你的大多数正则表达式是正确的,你只需要在你的正则表达式中添加:,例如:

final Pattern pattern = Pattern.compile("From (.+?): icmp_seq=");

答案 3 :(得分:0)

尝试简单:

String ip = "From 10.251.211.1: icmp_seq=1 Time to live exceeded".replaceAll("From ((\\d{1,3}\\.?){4}):.+", "$1");

考虑一下你必须逐行阅读的事实。

答案 4 :(得分:-1)

如果你能让regex工作得很好,但我个人会使用字符串函数。获取&#34; From&#34;的索引,得到&#34; icmp&#34;的索引。并获取两者之间的子字符串。