كيف يمكنني تطابق عناوين IPv6 مع التعابير المنطقية بيرل؟

StackOverflow https://stackoverflow.com/questions/1802722

  •  05-07-2019
  •  | 
  •  

سؤال

ولذا أنا بحاجة إلى تطابق عنوان IPv6 التي قد تكون أو لا تكون قناعا. للأسف لا أستطيع أن مجرد استخدام مكتبة تحليل السلسلة.

وبت قناع من السهل بما فيه الكفاية، في هذه الحالة:

(?:\/\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

وأنا، في هذه الحالة تقتصر على استخدام التعابير المنطقية بيرل.

هل كانت مفيدة؟

المحلول

هذا يحتوي على التصحيح إلى التعبير العادي :: التظاهر المشترك كاملة ودقيقة، واختبارها باستخدام التعابير المنطقية الإصدار IPv6. في ترجمة مباشرة من قواعد اللغة الإصدار IPv6. التعبير العادي :: الإصدار IPv6 هو أيضا دقيقة.

والأهم من ذلك، أنه يحتوي على مجموعة الاختبار. تشغيله مع التعابير المنطقية الخاصة بك يظهر أنك لا تزال بعيد المنال. 10 من أصل 19 لم يرد عليها. 1 من أصل 12 ايجابيات كاذبة. الإصدار IPv6 يحتوي على الكثير من الإختزالات الخاصة مما يجعل من السهل جدا الحصول على الخطأ بمهارة.

وأفضل مكان لتقرأ على ما يدور في عنوان IPv6 هو href="http://www.ietf.org/rfc/rfc3986.txt" RFC القسم 3986 3.2.2.

نصائح أخرى

وماذا يعني أنك لا يمكن أن مجرد استخدام المكتبة؟ ماذا عن وحدة؟ Regexp::IPv6 سوف تعطيك ما تحتاج إليه.

وأنا لست خبيرا IPv6، ولكن يرجى ثق بي عندما أقول لكم أن مطابقة (ناهيك عن التحقق) عناوين IPv6 ليست سهلة مع التعابير المنطقية بسيط جدا مثل واحد يوحي لك. هناك العديد من الإختزالات والاتفاقيات المختلفة للجمع بين عنوان مع منفذ، وهذا غيض مثال على ذلك. واحدة من هذه الاختزال هو أنه يمكنك كتابة 0: 0: 0: 0: 0: 0: 0: 1 كما :: 1، ولكن هناك أكثر من ذلك. إذا كنت تقرأ الألمانية، أود أن أقترح النظر في الشرائح من ستيفن أولريش في حديث في ورشة عمل بيرل الألمانية ال11.

وأنت تقول لا يمكنك استخدام مكتبة، ولكن إذا كنت تريد الذهاب لإعادة اختراع التعقيد كله من المكتبة، ثم هل يمكن كذلك مجرد استيراده حرفيا في المشروع.

وهذا يعمل معظمهم ...

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

وسلبيات: :: مثل الحالات لم يتم التعامل معها بشكل صحيح

وجرب هذا:

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

مكتبة التعبير العادية: عنوان IPv6

ويجب عليك أيضا قراءة هذا: تعبير عادي ل IPv6 عناوين

إذا كنت تحتاج في الاختيار بيرل إذا سلسلة هي عنوان IPv6 يمكنك أن تجرب هذا:

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

وجرب:

/^(((?=(?>.*?(::))(?!.+\3)))\3?|([\dA-F]{1,4}(\3|:(?!$)|$)|\2))(?4){5}((?4){2}|((2[0-4]|1\d|[1-9])?\d|25[0-5])(\.(?7)){3})\z/ai

ومن: http://home.deds.nl/~aeron/regex/

وهنا هو عمل واحد لجميع الأمثلة من الإصدار IPv6 لقد تمكنت من العثور على:

/^\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*$/

وتأكد من انها خط واحد قبل استخدام. لقد تم اكتشاف هنا:

الشبكي: //community.helpsystems كوم / منتديات / InterMapper و/ متنوعة-الموضوعات / 5acc4fcf-fa83-e511-80cf-0050568460e4

والتحقق على أمثلة من الصفحة السؤال، صفحة المجتمع وموقع ويكيبيديا من هنا:

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

والأداة للتحقق يتم استخدام واحد من هنا:

https://regex101.com/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top