需要正则表达式模式来捕捉公式

时间:2009-11-10 06:17:49

标签: c# regex

我需要在C#中扩展一个正则表达式模式。当前模式正在捕获公式中的任何乘法或除法:

([\+-]?\d+,*\d*[eE][\+-]?\d+|[\-\+]?\d+,*\d*)([\/\*])(-?\d+,*\d*[eE][\+-]?\d+|-?\d+,*\d*)

这意味着,如果表达式是例如12+18*3+4-3/3,它会捕获18*3-3/3。那样太好了。

现在我需要扩展它,以便它捕获以下示例:12+18*3+4-3/3+10*mod8。它应该首先捕获18*3,然后是-3/3,因为它到目前为止,但它应该捕获10mod8(或10*mod8)。我怎样才能做到这一点?谢谢。

2 个答案:

答案 0 :(得分:1)

在中间,你有([\/\*]) 尝试将其更改为([/*]|\*?mod) - 这将接受*/mod*mod

答案 1 :(得分:1)

您无法在regex中实现某种运算符优先级。正则表达式匹配,或者不匹配。正则表达式也无法处理匹配的嵌套括号。正确执行此操作的唯一方法是编写表达式词法分析器/解析器或定义grammar and let a tool like ANTLR generate the lexer/parser for you