2009-05-24 8 views
0

Ich entwickle einen einfachen Übersetzer von MathML zu Latex, mit Lex und Yacc. In meiner Lex-Datei, die die Regex-Regeln enthält, habe ich eine für arithmetische Operatoren definiert [- + * = /]. Ich möchte erweitert werden, so dass es plus-minus (+ -) und unsichtbare Zeiten ('& InvisibleTimes') erkennen würde, aber ich bin mit Regex nicht vertraut und ich brauche etwas Hilfe.Regex für Lex

Antwort

1

Versuchen Sie folgendes:

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

Beachten Sie, dass die + in +- entkommen müssen, weil es ein Bediener außerhalb von Zeichenklassen ist. Sie können dies mit Backslash (wie ich es hier gemacht habe) oder mit Anführungszeichen tun. (Die doppelte Anführungszeichen-Syntax ist ziemlich ungewöhnlich - die meisten anderen Regex-Implementierungen verwenden nur Backslash zum Entkommen, also würde ich geneigt sein, Backslashes zu verwenden, da es die Regex "konventioneller" macht.)

2

Würde so etwas funktionieren?

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

Ich bin nicht sehr vertraut mit MathML, so habe ich das gegenteilige Problem von dir. Wie andere gesagt haben, können Sie dies in einem regulären Ausdruck alle tun, wie folgt aus:

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

Wenn Sie jedoch mit jedem dieser verschiedenen Aktionen zugeordnet haben wollen, müssen Sie es wie dies zu tun:

 
[-+*=/]   {/* action 1 here */} 
\+-    {/* action 2 here */} 
&InvisibleTimes {/* action 3 here */}