2009-11-26 12 views
5

तो मुझे एक आईपीवी 6 पता से मेल खाना चाहिए जो मास्क हो या न हो। दुर्भाग्यवश मैं स्ट्रिंग को पार्स करने के लिए सिर्फ लाइब्रेरी का उपयोग नहीं कर सकता।मैं पर्ल रेगेक्स के साथ आईपीवी 6 पते से कैसे मिलान कर सकता हूं?

मुखौटा बिट बहुत आसान है, इस मामले में:

(?:\/\d{1,3})?$/ 

कठिन हिस्सा एक IPv6 पता के विभिन्न स्वरूपों है। , मैं लगभग वहाँ रहा हूँ ..

/^(\:\:([a-f0-9]{1,4}\:){0,6}?[a-f0-9]{0,4}|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){0,6}?\:\:|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){1,6}?\:\:([a-f0-9]{1,4}\:){1,6}?[a-f0-9]{1,4})(\/\d{1,3})?$/i 

मैं कर रहा हूँ इस मामले पर्ल के उपयोग तक ही सीमित में: यह :: मांस, गोमांस ::, मांस :: मांस, आदि

एक अद्यतन से मेल खाना चाहिए regex।

+1

क्या यह होमवर्क है? या आप लाइब्रेरी का उपयोग क्यों नहीं कर सकते और आप क्या कहते हैं कि आप "पर्ल रेगेक्स" तक सीमित हैं? – innaM

+2

मैं जिस भाषा का उपयोग कर रहा हूं वह पर्ल है। अन्य पुस्तकालयों के उपयोग की अनुमति देने के लिए आवश्यक परिवर्तन अधिक काम करेंगे। होमवर्क परिभाषित करें? मैं घर पर हूं और मैं काम कर रहा हूं। यह उन परियोजनाओं में से एक है जिन पर मैं काम कर रहा हूं - यदि आप शैक्षणिक उद्देश्यों के लिए हैं, तो नहीं। – imnotneo

+6

"अन्य पुस्तकालयों के उपयोग की अनुमति देने के लिए आवश्यक परिवर्तन अधिक काम करेंगे।" -- मुझे शक है। कम से कम लंबे समय तक नहीं। आम तौर पर, सीपीएएन से मॉड्यूल का उपयोग किए बिना पर्ल केवल आधा भाषा है। सरल शुद्ध पर्ल मॉड्यूल का उपयोग करने से इनकार करते हुए और फिर पहले हल की गई समस्याओं के समाधान के लिए दूसरों से पूछना ... अक्षम है। – tsee

उत्तर

13

This में Regexp :: आम तौर पर एक पूर्ण, सटीक, परीक्षण आईपीवी 6 रेगेक्स का प्रदर्शन करने वाला एक पैच होता है। यह आईपीवी 6 व्याकरण का सीधा अनुवाद है। Regexp::IPv6 भी सटीक है।

अधिक महत्वपूर्ण बात यह है कि इसमें एक परीक्षण सूट है। अपने रेगेक्स शो के साथ इसे चलाने से आप अभी भी एक तरीके से बंद हैं। 1 9 में से 10 चूक गए। 12 झूठी सकारात्मक में से 1। आईपीवी 6 में बहुत से विशेष शॉर्टैंड होते हैं जो बहुत कम गलत होने में बहुत आसान बनाते हैं।

आईपीवी 6 पते में जो भी हो रहा है उसे पढ़ने के लिए सबसे अच्छी जगह RFC 3986 सेक्शन 3.2.2 है।

+0

कोई भी जानता है कि इसका कोई पाइथन संस्करण है या नहीं? – jcollie

+0

@jcollie वे regexes किसी भी मजेदार पर्ल सुविधाओं का उपयोग नहीं कर रहे हैं। वे पाइथन के लिए एक अनुवाद अनुवाद होना चाहिए। – Schwern

1

इस प्रयास करें:

^([0-9a-fA-F]{4}|0)(\:([0-9a-fA-F]{4}|0)){7}$ 

से Regular Expression Library: IPv6 address

इस पढ़ना चाहिए: A Regular Expression for IPv6 Addresses

+0

यह 2001 से मेल खाता है: डीबी 8: 85 ए 3: 0: 0: 8 ए 2e: 370: 7334 2001: डीबी 8: 85 ए 3 :: 8 ए 2e: 370: 7334 2001: 0 डीबी 8: 0000: 0000: 0000 :: 1428: 57ab :: ffff: सी 000: 280 और अधिक bunches। – Schwern

5

मैं एक IPv6 विशेषज्ञ नहीं हूँ, लेकिन मुझ पर भरोसा कृपया है कि जब मैं आपको बता मिलान (अकेले सत्यापन करने दें) आईपीवी 6 पते एक बहुत ही सरल रेगेक्स के साथ आसान नहीं है जैसे कि आप सुझाव देते हैं। एक बंदरगाह के साथ पते को जोड़ने के लिए, बस एक उदाहरण नाम देने के लिए कई शॉर्टेंड और विभिन्न सम्मेलन हैं। ऐसा एक शॉर्टेंड यह है कि आप 0: 0: 0: 0: 0: 0: 0: 1 के रूप में :: 1 लिख सकते हैं, लेकिन और भी कुछ है। यदि आप जर्मन पढ़ते हैं, तो मैं 11 वीं जर्मन पर्ल कार्यशाला में Steffen Ullrich's talk की स्लाइड को देखने का सुझाव दूंगा।

आप कहते हैं कि आप लाइब्रेरी का उपयोग नहीं कर सकते हैं, लेकिन यदि आप लाइब्रेरी की पूरी जटिलता को फिर से शुरू करने जा रहे हैं, तो आप इसे अपने प्रोजेक्ट में वर्बैटिम आयात कर सकते हैं।

10

क्या मतलब है कि आप केवल लाइब्रेरी का उपयोग नहीं कर सकते हैं? मॉड्यूल के बारे में कैसे? Regexp::IPv6 आपको जो चाहिए वह आपको देगा।

1

आप पर्ल की जांच में जरूरत है एक स्ट्रिंग एक IPv6 है संबोधित आप इस कोशिश कर सकते हैं:

if (/(([\da-f]{0,4}:{0,2}){1,8})/i) { print("$1") }; 
2

यह ज्यादातर काम करता है ...

^([0-9a-fA-F]{0,4}|0)(\:([0-9a-fA-F]{0,4}|0)){7}$ 

विपक्ष: :: ठीक से समाधान नहीं मामलों की तरह

0

यहाँ एक आईपीवी 6 के सारे उदाहरण मैंने के लिए काम किया है खोजने में कामयाब:

/^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/ 

सुनिश्चित करें कि यह उपयोग करने से पहले एक पंक्ति है। यह यहां पाया गया है:

https://community.helpsystems.com/forums/intermapper/miscellaneous-topics/5acc4fcf-fa83-e511-80cf-0050568460e4

यहां से सवाल पृष्ठ, समुदाय पेज और विकिपीडिया साइट से सभी उदाहरणों पर सत्यापित:

https://en.wikipedia.org/wiki/IPv6

सत्यापन के लिए उपकरण इस्तेमाल किया जा रहा यहां से एक:

https://regex101.com/

संबंधित मुद्दे