Pregunta
Estoy desarrollando un traductor simple de MATHML a látex, usando LEX y YACC. En mi archivo LEX que contiene las reglas Regex, tengo una definida para operadores aritméticos [-+*=/]. Quiero extender para que reconozca los tiempos más mineros (+-) e invisibles ('e invisibletimes'), pero no estoy familiarizado con Regex y necesito ayuda.
Solución
Prueba esto:
([-+*=/]|\+-|&InvisibleTimes)
Tenga en cuenta que necesita escapar del +
en +-
Porque es un operador fuera de las clases de personajes. Puede hacer esto con barra inalcanzada (como he hecho aquí) o con citas dobles. (La sintaxis de doble cota es bastante inusual: la mayoría de las otras implementaciones de Regex solo usan barras invertidas para escapar, por lo que me inclinaría a usar barras trastas, ya que hace que el Regex sea más "convencional").
Otros consejos
Algo como esto funcionaría?
(?:[-+*=/]|\+-|&InvisibleTimes)
No estoy muy familiarizado con MathML, así que tengo el problema opuesto de ti. Como otros han dicho, puedes hacer todo esto en un solo Regex, como este:
[-+*=/]|\+-|&InvisibleTimes
Sin embargo, si desea tener diferentes acciones asociadas con cada uno de estos, debe hacerlo así:
[-+*=/] {/* action 1 here */} \+- {/* action 2 here */} &InvisibleTimes {/* action 3 here */}