Je développe un traducteur simple de MathML à Latex, en utilisant Lex et Yacc. Dans mon fichier lex contenant les regex, j'en ai défini un pour les opérateurs arithmétiques [- + * = /]. Je veux étendre afin qu'il reconnaisse les temps plus-moins (+ -) et invisibles ('& InvisibleTimes'), mais je ne suis pas familier avec regex et j'ai besoin d'aide.Regex pour lex
Répondre
Essayez ceci:
([-+*=/]|\+-|&InvisibleTimes)
Notez que vous devez échapper à la +
dans +-
parce qu'il est un opérateur extérieur des classes de caractères. Vous pouvez le faire avec backslash (comme je l'ai fait ici) ou avec des guillemets doubles. (La syntaxe des guillemets est assez inhabituelle - la plupart des autres implémentations regex n'utilisent que des antislashs pour l'échappement, donc je serais enclin à utiliser des antislashs car cela rend l'expression rationnelle plus "conventionnelle".)
Un truc pareil pourrait-il fonctionner?
(?:[-+*=/]|\+-|&InvisibleTimes)
Je ne suis pas très familier avec MathML, donc j'ai le problème inverse de vous. Comme d'autres l'ont dit, vous pouvez faire tout cela dans un regex, comme ceci:
[-+*=/]|\+-|&InvisibleTimes
Cependant, si vous voulez avoir des actions associées à chacun de ceux-ci, vous devez le faire comme ceci:
[-+*=/] {/* action 1 here */} \+- {/* action 2 here */} &InvisibleTimes {/* action 3 here */}