السلام عليكم و رحمة الله و بركاته
كل عام و أنت بخير إخواني الكرام
لدي سؤال في الـ Regular Expressions
أنا لم أستعملها كثيراً لذلك ليست لدي الكثير من الخبرة في التعامل معها
أنا أقوم بتصميم برنامج يحلل بعص التعليمات و هذه التعليمات خاصة ببرمجة الماكينات الـ CNC
المهم أن كل تعليمة لها شكل معين و أنا أود أن أتحقق من هذه الشكل أو التنسيق
على سبيل المثال هذا كود للتوضيح فقط
G00 X5 Y6
سيجعل الحد القاطع للماكينة يتحرك إلى الإحداثيات (6,5) أي س = 5 و ص = 6
هذا المثال يتكون من سطر واحد و السطر الواحد في هذه البرمجة يسمى Block
يتم تنفيذ البرنامج الكامل سطراً تلو الآخر.
قمت بتصميم برنامج و استطعت قرأة السطور و التحقق من الأوامر و البرنامج يعمل
وفق خطة معينة ليست هناك مشاكل .. المشكلة التي تواجهني هي كالآتي:
بعد أن أتعرف على الآمر .. أود أن أتحقق من كونه مكتوب بشكل صحيح و أردت أن أستخدم
الـ Regular Expressions و هنا واجهتني المشكلة
حيث أن الأمر السابق لا يشترط فيه الترتيب يعني أنه يمكن كتابته
G00 Y6 X5
أيضاً يمكن كتابة أحد المحاور دون ذكر الآخر .. يمكن ذكر واحد و لكن لايمكن اهمال الأثنين
أعني بمثال أنه يمكن كتابة الأمر في الشكل التالي:
G00 X4 Or G00 Y3
لا يلزم ذكر الأثنين معاً و لكن لا يمكن عدم كتابتهما معاً
طيب! الآن سوف أعرض عليكم التعابير التي استخدمتها لتحقيق ذلك
كخطوة أولى جربت التعرف على الأمر نفسه و هو الـ G-Code حيث أنه يوجد
G00,G01,G02,.. و هكذا .. استخدمت التعبير التالي:
^\b[gG]\d{2}\b$و هذا نجح بالفعل أضفت له جزء آخر ليصبح:
^\b[gG]\d{2}\b\s\b[xX]\d+\b$و هنا بدأت المشكلة حيث أني عندما أكتب مسافة بعد X نتيجة التطابق
تكون إيجابية و يقبل التكرار أيضاً يعني
G00 X5 X6
تكون مقبولة و هذا غير سليم ..
كل ما أريده تعبير يتحقق من شكل الأمر
G[Number] [X] [Y]
حيث ترتيب الاحداثيات ليس ضروري و لا يمكن تكرار الاحداثي مرتين في السطر الواحد
و لا يمكن اهمالهما معاً أرجو المساعة و جزاكم الله خيراً
