2013-04-08 9 views
10

アプリケーションでは、IPアドレスを含む文字列を取得しますが、これらの文字列には正確な形式はありません。 これらの文字列にはIPアドレスが含まれている可能性があります。私は正規表現を使用して文字列からIPアドレスを抽出する

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

になります。ここ

は、文字列がどのように見えることができるものの例です文字列のIPアドレスを抽出するJavaコードを取得するか、文字列にIPアドレスが含まれていない場合は ""を返すようにします。

私はこのコードを試してみましたが、それは動作しません:

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"; 
     } 

私は正規表現を使用してかなり確信しているので、誰かが私を助けることができることを実現するための最良の方法ですが、私はこれらと非常によくありませんよ良いRegExpを見つける?

ありがとうございます。

+0

可能重複します(http:/ /stackoverflow.com/questions/8439633/regex-ip-address-from-string) – Richard

+1

おかげでリチャード、これは正確に私のc IPは常に完全な言葉ではありませんが、それは私が答えを見つけるのを助けました。 – Padrus

答えて

27

リチャードのリンクは私が答えを見つける助けました。 はここで働くのコードです:

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

文字列を指定すると、http://256.225.255.255:8690/AppPortal/に56.225.255.255というIPアドレスが返されます。 – Arundev

+5

これは、256.255.255.255が有効なIPアドレスではないため、最大数は255です。 – Padrus

+1

^と$は存在しないため、この動作が有効です。オリジナルの正規表現は、その文字がなくてもうまくいっていました。それらの文字は文字列の先頭と末尾を示します。したがって、これら2つを含む正規表現は、文字列内にあるアドレスと一致しません。 –

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

チェックこのソリューションは、両方のIPV4 & IPV6はに対処し検証します。

/** 
* 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(); 
    } 
} 

ソース:Determine if the given string is a valid IPv4 or IPv6 address.

0

IPアドレス正規表現パターンは:

^([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])$ 

例と参考のためにクリックしてくださいhere

[文字列から正規表現IPアドレス]の
関連する問題