2008-09-05 10 views
7

स्ट्रिंग # मैचों (स्ट्रिंग) को पास करने के लिए एक स्ट्रिंग की तलाश है जो आईपीवी 4 से मेल खाएगा, और दूसरा आईपीवी 6 से मेल खाता है।आईपीवी 4 और आईपीवी 6 तारों के मिलान के लिए जावा नियमित अभिव्यक्तियां क्या हैं?

+0

भी देखें http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses – Flow

उत्तर

17
public static final String IPV4_REGEX = "\\A(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}\\z"; 
public static final String IPV6_HEX4DECCOMPRESSED_REGEX = "\\A((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) ::((?:[0-9A-Fa-f]{1,4}:)*)(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}\\z"; 
public static final String IPV6_6HEX4DEC_REGEX = "\\A((?:[0-9A-Fa-f]{1,4}:){6,6})(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}\\z"; 
public static final String IPV6_HEXCOMPRESSED_REGEX = "\\A((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)::((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)\\z"; 
public static final String IPV6_REGEX = "\\A(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}\\z"; 

कुछ ब्लॉग से इन्हें मिला। किसी भी अच्छे w/regexes सभी IPv6 पता प्रकारों के लिए एक एकल regex के साथ आने में सक्षम होना चाहिए। दरअसल, मुझे लगता है कि आपके पास एक एकल रेगेक्स हो सकता है जो आईपीवी 4 और आईपीवी 6 दोनों से मेल खाता है।

+5

हाँ, इसमें कोई शक नहीं किसी को साथ आना चाहिए एक एकल, सभी समावेशी रेगेक्स - ये बहुत दूर हैं, जैसा कि बहुत छोटा है। –

+0

धन्यवाद! ये एक अच्छा प्रारंभिक बिंदु है। लेकिन मुझे पता चला है कि IPV6_HEXCOMPRESSED_REGEX "1 :: 2: 3: 4: 5: 6: 7: 8" स्वीकार करेगा, जो मान्य नहीं है क्योंकि आपके पास 8 से अधिक समूह नहीं हो सकते हैं और :: अधिक संकुचित समूह का तात्पर्य है । – gusterlover6

3

यहाँ एक regex IPv4 पतों मैच के लिए है:

\b(?:(?: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]?)\b 

जब आप एक स्ट्रिंग जावा में शाब्दिक रूप में यह निर्दिष्ट बैकस्लैश से बचने के लिए की आवश्यकता होगी:

"\\b(?:(?: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]?)\\b" 
6

प्रसंस्करण के लिए एक और अच्छा विकल्प आईपी ​​जावा के वर्ग Inet4Address और Inet6Address का उपयोग करना है, जो कई तरीकों से उपयोगी हो सकता है, जिनमें से एक आईपी पते की वैधता निर्धारित करना है।

मुझे पता है कि यह सीधे सवाल का जवाब नहीं देता है, लेकिन सिर्फ सोचा कि यह उल्लेखनीय है।

0

रेगेक्स आईपीवी 4 भागों में अग्रणी शून्यों के उपयोग की अनुमति देता है।

कुछ यूनिक्स और मैक डिस्ट्रोज़ उन खंडों को ऑक्टल में परिवर्तित करते हैं।

मैं एक आईपीवी 4 सेगमेंट के रूप में 25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d का उपयोग करने का सुझाव देता हूं।

0

ipv6 के लिए Regexes वास्तव में मुश्किल हो सकता है जब आप एम्बेडेड ipv4 और संपीड़ित पते वाले पते पर विचार करते हैं।

The open-source IPAddress Java library आईपीवी 6 और आईपीवी 4 के सभी मानक प्रतिनिधित्वों को मान्य करेगा और उपसर्ग-लंबाई (और इस तरह के सत्यापन) का भी समर्थन करेगा। अस्वीकरण: मैं उस पुस्तकालय का प्रोजेक्ट मैनेजर हूं।

कोड उदाहरण:

try { 
    IPAddressString str = new IPAddressString("::1"); 
    IPAddress addr = str.toAddress(); 
} catch(AddressStringException e) { 
    //e.getMessage has validation error 
} 
संबंधित मुद्दे