我需要在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
)。我怎样才能做到这一点?谢谢。
答案 0 :(得分:1)
在中间,你有([\/\*])
尝试将其更改为([/*]|\*?mod)
- 这将接受*
,/
,mod
和*mod
答案 1 :(得分:1)
您无法在regex中实现某种运算符优先级。正则表达式匹配,或者不匹配。正则表达式也无法处理匹配的嵌套括号。正确执行此操作的唯一方法是编写表达式词法分析器/解析器或定义grammar and let a tool like ANTLR generate the lexer/parser for you。