كيف يمكنني تمثيل إبسيلون في تعبير منتظم؟

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

  •  02-10-2019
  •  | 
  •  

سؤال

يعلمنا الكتاب النصي كتابة تعبيرات منتظمة باستخدام Epsilon (ε) الرمز ، ولكن كيف يمكنني ترجمة هذا الرمز مباشرة إلى التعليمات البرمجية دون الحاجة إلى إعادة صياغة تعبيري المعتاد تمامًا؟

على سبيل المثال ، كيف يمكنني كتابة هذا regex الذي سيحصل على جميع الأوتار الصغيرة التي تبدأ أو تنتهي a (او كلاهما).

ليس 100 ٪ متأكد من أن هذا صحيح ولكن ...

((أ |epsilon) [AZ*أ) | (A [AZ*(أ |epsilon))

لذلك تشمل بعض الأوتار التي يجب أن تتطابق:

a //single "a" starts or ends with "a"

aa //starts and ends with "a"

ab //starts with "a"

ba //ends with "a"

aba //starts and ends with "a"

aaaaaaaa //starts and ends with "a"

abbbbbbb //starts with "a"

bbbbbbba //ends with "a"

abbbbbba //starts and ends with "a"

asdfhgdu //starts with "a"

onoineca //ends with "a"

ahnrtyna //starts and ends with "a"

أنا فقط ما أتبادل epsilon بالنسبة للرمز الصحيح ، لا أريد تعديل أي جزء من بقية التعبير. كما أريد أن أكون واضحًا ، فأنا لا أتحقق بالفعل من رمز إبسيلون ، وأريد أن يكون لدي خيار للشخصية أو لا شيء (حسنًا لا شيء ... إبسيلون).

هل يوجد مثل هذا الرمز؟

هل ما أريده ممكنًا؟

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

المحلول

ما عليك سوى حذف 𝜖 ، لأنه يدل على السلسلة الفارغة:

([1-9]|)[0-9]*

هناك أيضًا اختصار لهذه الحالة بالذات:

([1-9]?)[0-9]*

ال ? يعني صفر أو أحداث واحدة من الرمز المميز السابق.

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