Domanda
Sto sviluppando un semplice traduttore dal MathML al lattice, utilizzando Lex e Yacc. Nel mio file lex contenente le regole regex ho quello definito per gli operatori aritmetici [- + * = /]. Voglio esteso in modo che avrebbe riconosciuto più-meno (+ -) e tempi di invisibili ( '& InvisibleTimes'), ma sono familiarità con regex e ho bisogno di aiuto
.Soluzione
Prova questo:
([-+*=/]|\+-|&InvisibleTimes)
Si noti che è necessario per sfuggire alla +
in +-
perché è un operatore esterno di classi di caratteri. Si può fare questo con la barra rovesciata (come ho fatto qui) o con le doppie virgolette. (La sintassi doppia citazione è abbastanza inusuale -. Maggior parte delle altre implementazioni regex utilizzano solo backslash per sfuggire, quindi mi piacerebbe essere incline a utilizzare barre rovesciate in quanto rende l'espressione regolare più "convenzionale")
Altri suggerimenti
Sarebbe qualcosa di simile a questo lavoro?
(?:[-+*=/]|\+-|&InvisibleTimes)
Io non sono molto familiare con MathML, così ho il problema opposto di voi. Come altri hanno detto, è possibile fare tutto questo in una regex, in questo modo:
[-+*=/]|\+-|&InvisibleTimes
Tuttavia, se si desidera avere diverse azioni associate a ciascuno di questi, è necessario fare in questo modo:
[-+*=/] {/* action 1 here */} \+- {/* action 2 here */} &InvisibleTimes {/* action 3 here */}