有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中的嵌套正则表达式匹配

我有一个场景,我想在Java中进行嵌套表达式匹配

考虑以下表达式:

SUM_ALL(2:3,4:5)>20

其中SUM_ALL在应用程序中具有保留运算符含义。现在,我想从给定的表达式中提取运算符名及其参数。为了实现同样的目的,我将模式表达式定义如下:

Pattern testPattern = Pattern.compile("[^a-zA-Z]*([a-zA-Z_]+)\\s*\\(\\s*([0-9:,]+)\\s*\\).*");

如果表达式仅限于上述内容,则可以使用此选项。以下是相同的输出:

Group 1: SUM_ALL
Group 2: 2:3,4:5

现在,在一个给定的表达式中,我可能不知道有多少这样的操作员在场。例如,考虑以下情况:

SUM_ALL(4:5,6:7)>MAX(2:3,4:4)+MIN(3:4,5:7)

现在,我想提取上面的每个操作符和它们各自的参数,根据它们保留的含义执行计算,然后计算一个简单的数学表达式

如果Java模式匹配器中有嵌套功能,那么在解析操作符后,它会考虑表达式的其余部分,从而帮助逐个提取操作符。我知道可以通过在一个单独的组中捕获表达式的其余部分,然后在该组值上运行matcher并继续执行,直到我们到达表达式的末尾,这样做是可能的,但我更感兴趣的是知道模式匹配器是否具有相同的固有功能


共 (1) 个答案

  1. # 1 楼答案

    好吧,有这个:

    (?:(SUM_ALL|MAX|MIN|addmorehere)\\(((?:\d+:\d+,?){2})\\)[+-><*/addmorehere]?)+

    它不是java或任何语言的替罪羊,但你明白了