2013-04-08 6 views
10

In einer Anwendung erhalte ich Strings mit IP-Adressen, aber diese Zeichenfolge hat kein genaues Format. Alles, was wir wissen ist, dass diese Zeichenfolgen eine IP-Adresse enthalten können.Extrahieren von IP-Adressen aus Strings mit Regex

hier ist ein Beispiel dafür, was die Zeichenfolge wie folgt aussehen kann:

  • "XPSPort"
  • "IP_10.29.167.187"
  • "10.29.166.193"

würde ich gerne bekomme ich einen Java-Code, der die IP-Adresse des Strings extrahiert, wenn es einen gibt oder "" zurückgibt, wenn der String keine IP-Adresse enthält.

habe ich versucht, diesen Code, aber es funktioniert nicht:

String IPADDRESS_PATTERN = 
     "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + 
     "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + 
     "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + 
     "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"; 

Pattern pattern = Pattern.compile(IPADDRESS_PATTERN); 
Matcher matcher = pattern.matcher(ipString); 
     if (matcher.find()) { 
      return matcher.group(); 
     } 
     else{ 
      return "0.0.0.0"; 
     } 

Ich bin mir ziemlich sicher, dass der beste Weg, mit RegExp ist, dass zu erreichen, aber ich bin nicht sehr gut mit diesen so jemand kann mir helfen finde die gute RegExp?

Vielen Dank im Voraus.

+0

möglich Duplikat [regex IP-Adresse von string] (http://stackoverflow.com/questions/8439633/regex-ip-address-from-string) – Richard

+1

Danke Richard, das ist nicht genau ein Duplikat, weil in meinem c Das IP ist nicht immer ein volles Wort, aber es hat mir geholfen, die Antwort zu finden. – Padrus

Antwort

27

Richards Link hat mir geholfen, die Antwort zu finden. hier ist der Arbeitscode:

String IPADDRESS_PATTERN = 
     "(?:(?: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]?)"; 

Pattern pattern = Pattern.compile(IPADDRESS_PATTERN); 
Matcher matcher = pattern.matcher(ipString); 
if (matcher.find()) { 
    return matcher.group(); 
} else{ 
    return "0.0.0.0"; 
} 
+0

Wenn geben Sie eine Zeichenfolge http://256.225.255.255:8690/AppPortal/ zurückgeben IP-Adresse als 56.225.255.255. – Arundev

+5

das ist, weil 256.255.255.255 ist keine gültige IP-Adresse, die maximale Anzahl ist 255. – Padrus

+1

Der Grund dafür ist, weil die^und $ sind nicht da. Deine ursprüngliche Regexp hätte auch ohne diese Zeichen funktioniert. Diese Zeichen bezeichnen den Anfang und das Ende des Strings, daher entspricht ein Regex, der diese beiden enthält, nicht einer Adresse, die innerhalb des Strings gefunden wird. –

11

IPV4_PATTERN = "^(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}$"

9

prüfen diese Lösung sowohl IPV4 & IPV6 zu validieren Adressen.

/** 
* This class provides a variety of basic utility methods that are not 
* dependent on any other classes within the org.jamwiki package structure. 
*/ 
public class Utilities { 
    private static Pattern VALID_IPV4_PATTERN = null; 
    private static Pattern VALID_IPV6_PATTERN = null; 
    private static final String ipv4Pattern = "(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])"; 
    private static final String ipv6Pattern = "([0-9a-f]{1,4}:){7}([0-9a-f]){1,4}"; 

    static { 
    try { 
     VALID_IPV4_PATTERN = Pattern.compile(ipv4Pattern, Pattern.CASE_INSENSITIVE); 
     VALID_IPV6_PATTERN = Pattern.compile(ipv6Pattern, Pattern.CASE_INSENSITIVE); 
    } catch (PatternSyntaxException e) { 
     //logger.severe("Unable to compile pattern", e); 
    } 
    } 

    /** 
    * Determine if the given string is a valid IPv4 or IPv6 address. This method 
    * uses pattern matching to see if the given string could be a valid IP address. 
    * 
    * @param ipAddress A string that is to be examined to verify whether or not 
    * it could be a valid IP address. 
    * @return <code>true</code> if the string is a value that is a valid IP address, 
    * <code>false</code> otherwise. 
    */ 
    public static boolean isIpAddress(String ipAddress) { 

    Matcher m1 = Utilities.VALID_IPV4_PATTERN.matcher(ipAddress); 
    if (m1.matches()) { 
     return true; 
    } 
    Matcher m2 = Utilities.VALID_IPV6_PATTERN.matcher(ipAddress); 
    return m2.matches(); 
    } 
} 

Quelle: Determine if the given string is a valid IPv4 or IPv6 address.

0

IP-Adresse Regular Expression Pattern:

^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\. 
([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$ 

als Referenz mit Beispielen klicken here

Verwandte Themen