سؤال
أقوم بتطوير مترجم بسيط من MathML إلى اللاتكس، باستخدام Lex و YACC. في ملف LEX الخاص بي الذي يحتوي على قواعد Regex لدي واحدة محددة للمشغلين الحساميين [- + * = /]. أريد أن تمدد بحيث يتعرف على زائد ناقص (+ -) وأوقات غير مرئية ("& invisibletimes")، لكنني غير مألوف مع Regex وأحتاج إلى بعض المساعدة.
المحلول
جرب هذا:
([-+*=/]|\+-|&InvisibleTimes)
لاحظ أنك تحتاج إلى الهروب من +
في +-
لأنه مشغل خارج فئات الأحرف. يمكنك القيام بذلك مع Backslash (كما فعلت هنا) أو مع علامات اقتباس مزدوجة. (بناء الجملة مزدوج الاقتباس غير عادي - معظم تطبيقات Regex الأخرى تستخدم فقط Backslash للهرب، لذلك سأتميل إلى استخدام Backslashes لأنها تجعل Regex أكثر "تقليدية".)
نصائح أخرى
هل شيء مثل هذا العمل؟
(?:[-+*=/]|\+-|&InvisibleTimes)
أنا لست على دراية جدا بالرياضيات، لذلك لدي مشكلة معاكسة لك. كما قال آخرون، يمكنك القيام بذلك في ريجيكس واحد، مثل هذا:
- + * = /] | + - | & invisibletimes
ومع ذلك، إذا كنت ترغب في الحصول على إجراءات مختلفة مرتبطة بكل منها، فأنت بحاجة إلى القيام بذلك مثل هذا:
- + * = /] {/ * الإجراء 1 هنا * /} + - {/ * الإجراء 2 هنا * /} & Invisibletimes {/ * الإجراء 3 هنا * /}