سؤال

أقوم بتطوير مترجم بسيط من MathML إلى اللاتكس، باستخدام Lex و YACC. في ملف LEX الخاص بي الذي يحتوي على قواعد Regex لدي واحدة محددة للمشغلين الحساميين [- + * = /]. أريد أن تمدد بحيث يتعرف على زائد ناقص (+ -) وأوقات غير مرئية ("& invisibletimes")، لكنني غير مألوف مع Regex وأحتاج إلى بعض المساعدة.

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

المحلول

جرب هذا:

([-+*=/]|\+-|&InvisibleTimes)

لاحظ أنك تحتاج إلى الهروب من + في +- لأنه مشغل خارج فئات الأحرف. يمكنك القيام بذلك مع Backslash (كما فعلت هنا) أو مع علامات اقتباس مزدوجة. (بناء الجملة مزدوج الاقتباس غير عادي - معظم تطبيقات Regex الأخرى تستخدم فقط Backslash للهرب، لذلك سأتميل إلى استخدام Backslashes لأنها تجعل Regex أكثر "تقليدية".)

نصائح أخرى

هل شيء مثل هذا العمل؟

(?:[-+*=/]|\+-|&InvisibleTimes)

أنا لست على دراية جدا بالرياضيات، لذلك لدي مشكلة معاكسة لك. كما قال آخرون، يمكنك القيام بذلك في ريجيكس واحد، مثل هذا:

- + * = /] |  + - | & invisibletimes

ومع ذلك، إذا كنت ترغب في الحصول على إجراءات مختلفة مرتبطة بكل منها، فأنت بحاجة إلى القيام بذلك مثل هذا:

- + * = /] {/ * الإجراء 1 هنا * /}  + - {/ * الإجراء 2 هنا * /} & Invisibletimes {/ * الإجراء 3 هنا * /}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top