نجتاز التحدي RegexPlay 100 ٪

يقدم تحدي من Learning Learning Lab التابع لجامعة تريست (إيطاليا) حل 12 مشكلة ، ويختلف مستوى المهام بشكل كبير - من السهل إلى الصعب.


بالطبع ، يمكن أن يكون هناك أكثر من حل ، ولا تغطي حالات الاختبار في المشكلة جميع الخيارات. ومع ذلك ، إذا حصلت على 100 ٪ ، فتهانينا! مرت الاختبار.


المفسد: في بعض المهام (خاصة الخفيفة منها) ، فإن التلميح هو الحل العملي.


المهمة 1 - العثور على الأرقام


هناك نص يحتوي على أرقام ، تحتاج إلى العثور على جميع الأرقام.


الصعوبة: فائقة سهلة.


مساعدة

تحتاج إلى استخدام حرف أرقام وكمية مضاعف.


قرار
\ د +

"[0-9] +" هو القرار الصحيح أيضًا.


حل تحليل
  • "\ d" أو "[0-9]" - أي حرف مفرد من 0 إلى 9.
  • "+" - يُسمح بحرف واحد أو أكثر.

المهمة 2 - العثور على عناوين لجنة الهدنة العسكرية


هناك نص يحتوي على عناوين ماك ، تحتاج إلى العثور عليها.


الصعوبة: سهلة.


مساعدة

تحتاج إلى استخدام حرف يعني أي حرف من أحرف أو أرقام ونقطتين للفصل ومحدِّد الكمي.


قرار
\ w {2}: \ w {2}: \ w {2}: \ w {2}: \ w {2}: \ w {2}

"+" بدلاً من "{2}" هو القرار الصحيح أيضًا ، وإن لم يكن دقيقًا تمامًا.


حل تحليل
  • "\ w" هو أي حرف في الأبجدية أو أي رقم.
  • "{2}" - يُسمح بحرفين فقط.

أفضل حل

لاحظ أولئك الذين لديهم دراية بعنوان mac أن عنوان mac مكتوب بترميز ست عشري. وفي الحل السابق ، تم استخدام علامة \ w ، مما يعني أي حرف من الأحرف الأبجدية وجميع الأرقام. أوافق ، ربما هذا غير ضروري ، لكن يمكنك أن تأخذ ذلك في الاعتبار ، وفي الوقت نفسه تقلل من الانتظام.


([\ da-f] {2} :) {5} [\ da-f] {2}

حل تحليل
  • "\ d" هو أي رقم واحد ، "af" عبارة عن نطاق من a إلى f. في المجموع ، لدينا مجموعة أحرف صالحة 0123456789abcdef - أي ، الرمز السداسي عشري. "{2}" - أي حرفين من مجموعة الأحرف هذه.
  • "([\ da-f] {2} :)" {5} - يُسمح بتكرار حرفين + عشري نقطتين تمامًا 5 مرات.
  • وفي نهاية "[\ da-f] {2}" - أي حرفين من مجموعة عرافة

المهمة 3 - العثور على عناوين بروتوكول نقل الملفات


هناك نص مع عناوين بروتوكول نقل الملفات ، تحتاج إلى العثور عليها.


الصعوبة: سهلة.


مساعدة

يجب أن تبدأ بـ ftp: // ثم تسرد الأحرف الصحيحة في العنوان ، دون أن تنسى الكمي المضاعف.


قرار
ftp: \ / \ / [\ w \ d -_. \ /] +

حل تحليل
  • "\ /" - الهروب العادي للحرف "/".
  • داخل الأقواس المربعة عبارة عن تعداد من الأحرف الصالحة ، أي أي حرف في الأبجدية أو أي رقم ، واصلة ، شرطة سفلية ، فترة أو شرطة مائلة (إذا كان هناك أحرف أخرى في الاسم ، يمكنك إضافتها).

المهمة 4 - العثور على القالب


هناك نوع من الملفات المنسقة تحتاج فيها إلى العثور على جميع الأسطر التي تطابق النموذج $ أي أحرف $.


الصعوبة: سهلة.


مساعدة

تحتاج إلى استخدام الهروب من الحرف المحجوز ، وحرف أي حرف ، ومحددات التعددية ، والكسل.


قرار

مهمة شائعة ، لكنها تتطلب معرفة أفضل قليلاً بالنظامين.


\\ $. +؟ \\ $

حل تحليل
  • "\\ $" هو الفرز بالدولار.
  • ". +" - أي عدد من أي أحرف ، "؟" - إزالة الجشع.

المهمة 5 - العثور على عناوين بروتوكول الإنترنت


البحث عن عناوين IP من النص.


الصعوبة: سهلة.


مساعدة

مشابهة جدا للمهمة الثانية.


قرار
\ d + \. \ d + \. \ d + \. \ d +

إذا بدلاً من "+" لقد كتبت "{1،3}" ، تكون قد انتهيت.


حل تحليل
  • "\ d" هو أي رقم واحد ،
  • "+" - أي عدد من الأحرف ، "{1،3}" - تقييد صارم على عدد الأحرف (من 1 إلى 3).

أفضل حل

عنوان IP ليس مجرد أرقام ، ولكنه أرقام من 0 إلى 255.


\ b ((\ d | [1-9] \ d | 1 \ d {2} | 2 [0-4] \ d | 25 [0-5]) \.) {3} (\ d | [1 -9] \ d | 1 \ d {2} | 2 [0-4] \ d | 25 [0-5]) \ b

حل تحليل

لتحديد النطاق من 0 إلى 255 ، سيتعين عليك تجربة القليل:


  • "\ d" هو رقم من 0 إلى 9
  • "[1-9] \ d" - رقم من 10 إلى 99
  • "1 \ d {2}" - رقم من 100 إلى 199
  • "2 [0-4] \ d" - رقم من 200 إلى 249
  • "25 [0-5]" - تشيلسو من 250 إلى 255

بعد ذلك ، نسمح بتكرار نمط الأرقام من 0 إلى 255 تمامًا 3 مرات:


  • "(\ d | [1-9] \ d | 1 \ d {2} | 2 [0-4] \ d | 25 [0-5]).) {3}" - داخل النقطة ، لأنها أيضًا كرر 3 مرات وفي النهاية نفس مجموعة الأرقام ، ولكن بدون نقطة.
  • في النهاية والبداية نضيف رمز الحدود للكلمة "\ b" - مطلوبًا لإزالة هذا النص "1172.30.42.109" من الإدخال (أوافق ، هذا غير مرجح وربما غير ضروري).

المهمة 6 - مرساة


اسحب علامة href من مستند html.


الصعوبة: متوسطة.


مساعدة

استخدم "أي حرف باستثناء" و "أو" لكل قوس.


قرار
href = ("[^"] + "| '[^'] + ')

حل تحليل
  • "- بدء البحث مع اقتباس مزدوج.
  • "[^"] + "- أي حرف على الإطلاق باستثناء اقتباس مزدوج.
  • ننتهي مع اقتباس مزدوج.

نضع كل هذا بين قوسين ، نلحق العلامة أو - "|" وكرر نفس الشيء لعروض الأسعار الفردية.


المهمة 7 - الروابط


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


الصعوبة: صعبة.


مساعدة

تحتاج إلى البدء بـ http ، واستخدام "أي حرف باستثناء" وإنهاء البحث بحرف صالح.


قرار
http: \ / \ / ([^> \ s] +) [\ w \ /]

لا توجد روابط https في المهمة ، ولكن يمكنك أخذ ذلك في الاعتبار عن طريق إضافة "s؟" بعد المتشعب


حل تحليل
  • "[^> \ s] +" ابحث عن أي أحرف باستثناء الحرف ">" وحرف المسافة. في الواقع ، يمكنك قراءة مثل هذا "نذهب حتى نرى أحد هذه الرموز."
  • "[\ w \ /]" هو محدد يسمح للرابط بأن ينتهي بحرف لاتيني فقط أو شرطة مائلة.

ونتيجة لذلك - نبدأ بـ http: // ، ثم أي حرف باستثناء الأحرف "<" أو المسافة ، ولكن في النهاية مطلوب الحرف أو الشرطة المائلة اللاتينية.


  • اضافية "ليالي" في "https؟" ما عليك سوى السماح بـ "http: //" و "https: //".

المهمة 8 - الرؤوس


في HTML ، يمثل الرأس أي علامة من أرقام h +.


الصعوبة: متوسطة.


مساعدة

ابدأ بالرقم h + digit + أي حرف أو غيابه.


قرار

بسيط جدا:


<h \ d. *>. * <\ / h \ d. *>

حل تحليل
  • "h \ d" - هنا نقول أنه بعد الحرف يجب أن يذهب بالضرورة "\ d".
  • ثم ". *" يمكن أن يذهب أي عدد من الأحرف أو لا شيء يمكن أن يذهب.

أفضل حل

بعد h يأتي رقمًا ، وتنص مواصفات html على أن الأرقام من 1 إلى 6 صالحة ، ولا يمكن إغلاق العلامة نفسها بأي شيء آخر غير الأقواس المثلثة. لذلك ، سيكون هذا الحل أكثر دقة:


<h [1-6] [^>] *>. +؟ <\ / h [1-6]>

صحيح ، هناك خطأ يسمح لك بفتح العلامة برقم واحد وإغلاق الآخر. وبالتالي ، سيكون الحل الأكثر دقة هو استخدام الروابط: "<h ([1-6]) [^>] *>. +؟ <\ / H \ 1>". هذا لا يعني أن الاختبار ليس حساسًا لحالة الأحرف.


حل تحليل
  • "h [1-6]" - هنا نقول أنه بعد "h" يجب أن ينتقل العدد من 1 إلى 6.
  • "[^>] *" - قد يستمر أي حرف باستثناء ">" ، أو قد لا يستمر.

بشكل منفصل ، حول الإضافة:


  • بتعبير "(h [1-6])" بين قوسين ، نقوم بإنشاء مجموعة في الرقم 1.
  • علاوة على ذلك ، باستخدام الرابط للمجموعة الأولى "\ 1" نتحدث عن ما نريد أن نراه في نهاية نفسه ، ح مع نفس العدد كما في البداية.

المهمة 9 - الهواتف


في النص المجاني وجدت في جميع الهواتف في أشكال مختلفة.


الصعوبة: صعبة.


مساعدة

من الضروري استخدام علامة وجود رمز أو عدم وجوده ، وكمية لتحديد عدد الأرقام ، وإنشاء مجموعة أحرف. ممكن تصميم أو.


قرار
\ (؟ \ d {3} [\). \ / -] {1،2} \ d {3} [-.] \ D {4}

سوف يعمل ، لكنه يسمح بحرفين بعد أول ثلاثة أرقام - إنه لأمر جيد إذا كان هناك قوس إغلاق ومسافة بعده ، لكنه سيكون سيئًا إذا كان هناك واصلان. لذلك ، يوجد حل أكثر دقة قليلاً: "\ (؟ \ D {3} (\)؟ | [. \ / -]) \ d {3} [-.] \ D {4}"


حل تحليل
  • "\ (؟" - نشير إلى إمكانية وجود الرمز "(" أو غيابه ، فنحن نحمي لأنه رمز محجوز.
  • "\ d {3}" - الأرقام مع تقييد 3 فقط.
  • الأحرف الإضافية "[\). \ / -] {1،2}" ممكنة - شرطة مائلة ، وإغلاق قوس ، وفترة ، ومسافة ، شرطة مائلة للخلف ووصلة. {1،2} - يقول أن هذه الأحرف يمكن أن تكون 1 أو 2. على سبيل المثال ، قوس الإغلاق والمسافة بعدها.
  • كذلك بالضرورة "[-.]" - واصلة أو فترة.
  • و "\ d {4}" هي الأرقام الأربعة في النهاية.

المهمة 10 - المؤلفون


هناك نمط معين يحتوي على عناصر ، ابحث عن جميع المؤلفين من حقل المؤلف.


الصعوبة: صعبة للغاية.


مساعدة

من الضروري الاعتماد على حقيقة أن جميع أسماء المؤلفين تبدأ بحرف كبير وتتم كتابتها بنمط.


قرار
[AZ] [A-Za-z - '] + ، [AZ] (\ {\\ "\ w \})؟ [A-za-z -'] * ([AZ] [A-Za-z- '] *)؟

هذا الحل صحيح ، لكنه يحتوي على ناقص. لقد تجولنا حول "{\" u} مع "عكاز" ({\ "\ w})؟" وأساسيًا أنه قابل للتطبيق إذا وضعت العكاز أيضًا في أجزاء أخرى من أسماء المؤلفين.


في أي حال ، إذا كنت قادرًا على حل هذه المشكلة بطريقة أو بأخرى ، فهذا رائع جدًا!


حل تحليل
  • "[AZ] [A-Za-z - '] +" - نحن نبحث عن كلمة تبدأ بالضرورة بحرف كبير ، ثم تحتوي على أي حرف أبجدي أو واصلة أو علامة اقتباس أحادية.
  • علاوة على ذلك ، كل شيء مماثل تمامًا للأعلى قليلاً ، لكن هنا بيننا "({\" \ w})؟ "- إنه مجرد عكاز يسمح لك بتجاوز الدرع. هذا يعني أن قطعة من" {\ "u}" يمكن أن تكون موجودة أو ليكون غائبا.
  • ثم مرة أخرى ، بالضبط نفس الشيء كما في الحالة الأولى "([AZ] [A-Za-z - '] *)؟" ، الإشعار مع استثناء أن هذا التعبير ملفوف في مجموعة وهناك "؟" وهذا يعني عدم ملزمة هذا الشرط.

يعد تعداد PS [A-Za-z] هنا إجراءً ضروريًا ، لأنه لا توجد معدلات في الاختبار.


أفضل حل

هناك حل أكثر إحكاما وبساطة يتيح لك التخلي عن العكاز أعلاه:


[AZ] \ S + ، [AZ] \ S * ([AZ] [\ S] *)؟ \ B

حل تحليل
  • "[AZ] \ S + ،" - أولاً ، بالضرورة ، الحرف الكبير "[AZ]" ، ثم أي عدد من الأحرف غير البيضاء "\ S +" إلى الفاصلة المنقوطة "،".
  • علاوة على ذلك ، نفس الشيء تقريبًا "[AZ] \ S *" - البداية هي بالضرورة بحرف كبير ، ثم أي حرف غير أبيض إلى حد الكلمة "\ b".
  • "([AZ] [\ S] *)؟" - وبينهم نفسه ، ولكن ليس مجموعة إلزامية لاسم الأوسط.

المهمة 11 - محتوى الرأس


تمامًا كما هو الحال في المهمة 8 ، ولكن عليك أن تجد ليس الرؤوس نفسها ، ولكن محتوياتها.


الصعوبة: صعبة.


مساعدة

المهمة مماثلة للمهمة 8. ليس من الصعب أن تعرف إذا نظرت إلى الأمام والخلف. لديه حل مع النظر إلى الوراء ودون النظر إلى الوراء.


قرار

دون النظر إلى الوراء:


([\ w] * <[^ h]. + | [^ <>] +) (؟ = <\ / h \ d>)

حل تحليل
  • "([\ w] * <[^ h]. + | [^ <>] +)" - هناك خياران لكيفية بدء تشغيل محتويات الرأس. الأول هو وضع علامة داخل "[\ w] * <[^ h]. +" - في الوقت نفسه ، تحتاج إلى التأكد من أنها ليست علامة h وتراعي أنه قد يكون هناك نص قبل العلامة. الخيار الثاني هو نص بدون علامات "[^ <>] +" ، أي أي أحرف غير فتح وإغلاق العلامة.
  • "(؟ = <\ / h \ d>)" - التطلع إلى الأمام ، حيث يجب أن يكون هناك علامة إغلاق h.

إذا نظرنا إلى الوراء:


(؟ <= <h [^>] +>). +؟ (؟ = <\ / h \ d>)

بالإضافة إلى ذلك ، يمكنك أن تأخذ في الاعتبار جميع التعليقات على الحل 8 من المشكلة.


حل تحليل
  • "(؟ <= <h [^>] +>)" - الظهور بداخله يجب أن يكون علامة h.
  • "(؟ = <\ / h \ d>)" - التطلع إلى الأمام ، حيث يجب أن يكون هناك علامة إغلاق h.

المهمة 12 - قائمة المؤلفين


المهمة تشبه المهمة العاشرة ، لكن في رأيي أسهل.


الصعوبة: صعبة.


مساعدة

جميع المبادئ الأساسية للمهام 10 ، ولكن عليك أن تنظر في بداية السطر. الحل الذي أعرفه يستخدم التطفل.


قرار
(؟ <= ^ \ d + \.) [AZ] [\ w] + ، [AZ] [\ w \.] +

حل تحليل
  • "(؟ <= ^ \ d +.)" - إذا نظرنا إلى الوراء حيث يجب أن يكون لديك أي عدد من الأرقام إلى النقطة مع وجود مسافة من سطر جديد.
  • "[AZ] [\ w] + ،" - قم أيضًا بإضافة أي كلمة من حرف كبير إلى فاصلة منقوطة ومرة ​​أخرى "[AZ] [\ w.] +".

أو ببساطة ، هذا:


(؟ <= ^ \ d + \.) [^ ،] + ، [^ ،:] +

حل تحليل
  • "(؟ <= ^ \ d +.)" - إذا نظرنا إلى الوراء حيث يجب أن يكون لديك أي عدد من الأرقام إلى النقطة مع وجود مسافة من سطر جديد.
  • "[^ ،] + ،" - أي عدد من الأحرف إلى الفاصلة + فاصلة.
  • "[^ ،:] +" - أي عدد من الأحرف قبل الفاصلة أو النقطتين.

Source: https://habr.com/ru/post/ar472110/


All Articles