كيف يمكنني تمثيل إبسيلون في تعبير منتظم؟
سؤال
يعلمنا الكتاب النصي كتابة تعبيرات منتظمة باستخدام 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]*
ال ?
يعني صفر أو أحداث واحدة من الرمز المميز السابق.