• 0
COMFORT

سؤال في Regular Expressions

سؤال

السلام عليكم و رحمة الله و بركاته

كل عام و أنت بخير إخواني الكرام

لدي سؤال في الـ 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]

حيث ترتيب الاحداثيات ليس ضروري و لا يمكن تكرار الاحداثي مرتين في السطر الواحد

و لا يمكن اهمالهما معاً أرجو المساعة و جزاكم الله خيراً

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

7 إجابة على هذا السؤال .

  • 0

السلام عليكم ورحمه الله وبركاته

اخي جرب العبارة التاليه

^G\d{2}\s+((X\d+\s+Y\d+)|(Y\d+\s+X\d+))$

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

و عليكم السلام و رحمة الله و بركاته

جزاك الله خيراً أخي VBHelper

جربت التعبير الذي كتبته لي و هو يعمل جيداً فيما عدا شيء واحد

و هو أنه لا يشترط أن يتم ذكر الإحداثيين (X,Y) معاً .. و في نفس الوقت

لا يمكن أن يتم إهمالهما معاً. يعني

G00 X5 Or G00 Y6

و هذا صحيح .. هذا فقط المتبقي.

ملاحظة أضفت شيء بسيط إلى تعبيرك ليصبح

^[Gg]\d{2}\s+(([Xx]\d+\s+[Yy]\d+)|([Yy]\d+\s+[Xx]\d+))$

و ذلك ليتم تجاهل حالة الأحرف لكي لا يكون Case Sensitive.

مرة أخرى جزاك الله خيراً على المساعدة

تم تعديل بواسطه COMFORT
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم ورحمه الله وبركاته

لا يلزم ذكر الأثنين معاً و لكن لا يمكن عدم كتابتهما معاً

على حسب طلبك ثم وضع العبارة السابقة!!

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

و عليكم السلام و رحمة الله و بركاته

على حسب طلبك ثم وضع العبارة السابقة!!

هذا مبين في المشاركة الأصلية أستاذي الفاضل

لعلك لم تلاحظها سهواً

بعد أن أتعرف على الآمر .. أود أن أتحقق من كونه مكتوب بشكل صحيح و أردت أن أستخدم

الـ Regular Expressions و هنا واجهتني المشكلة

حيث أن الأمر السابق لا يشترط فيه الترتيب يعني أنه يمكن كتابته

G00 Y6 X5

أيضاً يمكن كتابة أحد المحاور دون ذكر الآخر .. يمكن ذكر واحد و لكن لايمكن اهمال الأثنين

أعني بمثال أنه يمكن كتابة الأمر في الشكل التالي:

G00 X4
Or
G00 Y3

لا يلزم ذكر الأثنين معاً و لكن لا يمكن عدم كتابتهما معاً

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

UP

تم تعديل بواسطه COMFORT
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم ورحمه الله وبركاته

اخي جرب العبارة التاليه

^[Gg]\d{2}\s+(([Xx]\d+\s+[Yy]\d+)|([Yy]\d+\s+[Xx]\d+)|([Xx]\d+)|([Yy]\d+))$

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جزاك الله خيراً أخي VB Helper

التعبير يعمل جيداً كما هو مطلوب.

جزاك الله كل خير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .