我必须在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
但它不起作用。
答案 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;的索引。并获取两者之间的子字符串。