有 Java 编程相关的问题?

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

Java正则表达式,extract第2条语句

我有这种情况,我想提取字符串表达式的语句,但我不是正则表达式的专家

String expression = "blabla if(x = 6, statement1, statement2) blabla";

但是statement1可以递归地作为另一个if表达式,比如:

String expression = "blablaba iF(X = 6, if(X = 3, Z, Y), Y) bablabla";

在这种情况下,我需要提取Z,或者至少if(X = 3, Z, Y)

我做到了:

String IF_CONDITION_PATTERN = "[\\s|\\n|\\t]if\\s*\\((.*)\\,(.*)\\,(.*)([^)]*?)";

String formulaStr = "blablaba iF(X = 6, if(X = 3, Z, Y), Y) bablabla";

Pattern pattern = Pattern.compile(IF_CONDITION_PATTERN,
           Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(formulaStr);

while (matcher.find()) {
     for(int i=0; i<matcher.groupCount();i++){
           System.out.println("Found " + i + ": " + matcher.group(i) + ".");
        }
    }

结果是:

Found 0:  iF(X = 6, if(X = 3, Z, Y), Y) bablabla.
Found 1: X = 6, if(X = 3, Z.
Found 2:  Y).
Found 3:  Y) bablabla.

有人能帮我至少提取语句吗

谢谢, 努诺


共 (1) 个答案

  1. # 1 楼答案

    尝试一下,如果下面的正则表达式对您有效,它将匹配statement1Z作为您的示例

    正则表达式只需查找if语句,然后匹配第二个参数,该参数内部不包含,

    \bif\([^,]+,\s?([^,]+),[^,]+\)

    demo