регулярное выражение нескольких IP-адресов из строки - PullRequest
0 голосов
/ 29 ноября 2011

У меня есть строка, которая содержит несколько IP-адресов, например:

 String header = "Received: from example.google.com ([192.168.0.1]) by example.google.com ([192.168.0.2]) with mapi; Tue, 30 Nov 2010 15:26:16 -0600";

Я хочу использовать регулярное выражение, чтобы получить оба IP-адреса из этого.До сих пор мой код выглядит так:

public String parseIPFromHeader(String header) {
    Pattern p = Pattern.compile("\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b");
    Matcher m = p.matcher(header);
    boolean matchFound = m.find();

    System.out.println(matchFound);

    if (matchFound) {
         // Get all groups for this match
        for (int i=0; i<=m.groupCount(); i++) {
            // Get the group's captured text
            String groupStr = m.group(i);

            // Get the group's indices
            int groupStart = m.start(i);
            int groupEnd = m.end(i);

            // groupStr is equivalent to
            System.out.println(header.subSequence(groupStart, groupEnd));
        }
    }
}

, но я никогда не получаю совпадения.Я правильно подхожу к этому?Спасибо

Ответы [ 2 ]

5 голосов
/ 29 ноября 2011

Вы избежали \ символов перед точками, но если я правильно помню, вам нужно экранировать их также в последовательности \b, поэтому замените их на \\b

0 голосов
/ 29 ноября 2011

Если вам нужны только IP-адреса, вы можете значительно упростить свое регулярное выражение для соответствия только этим

"([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3})" //not perfect, i know...

А затем несколько раз используйте Matcher.find (), чтобы найти все вхождения в строке

while(m.find()) {
    String ip = m.group(1) //the first group is at index 1, group 0 is the whole match. (Does not actually make any difference here)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...