lex的正则表达式

时间:2009-05-24 23:46:57

标签: regex yacc lex

我正在使用Lex和Yacc开发一个从MathML到Latex的简单翻译器。在我的包含正则表达式规则的lex文件中,我为算术运算符[ - + * = /]定义了一个。我希望扩展它以便识别正负(+ - )和不可见时间('& InvisibleTimes'),但我不熟悉正则表达式,我需要一些帮助。

3 个答案:

答案 0 :(得分:2)

这样的事情会起作用吗?

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

答案 1 :(得分:1)

试试这个:

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

请注意,您需要转义+中的+-,因为它是字符类之外的运算符。你可以用反斜杠(我在这里完成)或双引号来做到这一点。 (双引号语法非常不寻常 - 大多数其他正则表达式实现只使用反斜杠进行转义,所以我倾向于使用反斜杠,因为它使正则表达式更“常规”。)

答案 2 :(得分:0)

我对MathML不太熟悉,所以我遇到了与你相反的问题。正如其他人所说,你可以在一个正则表达式中完成所有这些,如下所示:

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

但是,如果您想要将不同的操作与这些操作相关联,则需要这样做:

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