Frage
Ich entwickle einen einfachen Übersetzer von mathml bis latex mit Lex und YACC. In meiner LEX-Datei mit den Regex-Regeln habe ich eine für arithmetische Operatoren definiert [-+*=/]. Ich möchte erweitern, dass es Plus-Minus (+-) und unsichtbare Zeiten ('& Invisibletimes') erkennen würde, aber ich bin mit Regex nicht vertraut und brauche Hilfe.
Lösung
Versuche dies:
([-+*=/]|\+-|&InvisibleTimes)
Beachten Sie, dass Sie dem entkommen müssen +
in +-
Weil es ein Operator außerhalb von Charakterklassen ist. Sie können dies mit Backslash (wie ich es hier getan habe) oder mit doppelten Zitaten tun. (Die Doppelquote-Syntax ist ziemlich ungewöhnlich-die meisten anderen REGEX-Implementierungen verwenden nur Backslash zum Flucht.
Andere Tipps
Würde so etwas wie diese funktionieren?
(?:[-+*=/]|\+-|&InvisibleTimes)
Ich bin mit Mathml nicht sehr vertraut, also habe ich das entgegengesetzte Problem von dir. Wie andere gesagt haben, können Sie dies alles in einer Regex wie folgt tun:
[-+*=/]|\+-|&InvisibleTimes
Wenn Sie jedoch unterschiedliche Handlungen haben möchten, müssen Sie dies so tun:
[-+*=/] {/* action 1 here */} \+- {/* action 2 here */} &InvisibleTimes {/* action 3 here */}