Мне нужно получить значение между двумя словами в строке в 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
Мне нужно получить: 10.251.211.1
Этот IP-адрес всегда находится между From и icmp_seq.
Как я могу сделать это на Java? Я пробовал использовать этот код:
final Pattern pattern = Pattern.compile("From (.+?) icmp_seq=");
final Matcher matcher = pattern.matcher(output);
matcher.find();
Log.wtf(iLinkLog, "Process output"+matcher.group(1));
Но не работает.
5 ответов
Правильное регулярное выражение поможет:
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
Если вы можете заставить регулярное выражение работать отлично, но лично я бы использовал строковые функции. Получите индекс «От», получите индекс «icmp» и получите подстроку между ними.
Попробуйте просто:
String ip = "From 10.251.211.1: icmp_seq=1 Time to live exceeded".replaceAll("From ((\\d{1,3}\\.?){4}):.+", "$1");
Учтите тот факт, что вы должны читать вводимые данные построчно.
Вам просто нужно изменить свою строку на это:
final Pattern pattern = Pattern.compile("From ([0-9.]+): ");
Кроме того, я попытался отладить ваше регулярное выражение и обнаружил, что оно соответствует 10.251.211.1:
вместо 10.251.211.1
, поскольку :
также находится с помощью .
, т. Е. Я хочу сказать, что большая часть вашего регулярного выражения верна , и вам просто нужно добавить :
в ваше регулярное выражение, например:
final Pattern pattern = Pattern.compile("From (.+?): icmp_seq=");
Используйте приведенный ниже код, чтобы получить 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");
}
}
}
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.