Ich habe diese Situation, ich möchte die Anweisung1 dieser Zeichenfolge Ausdruck extrahieren, aber ich bin kein Experte in Regex.Java Regex, extrahieren 2. Anweisung
String expression = "blabla if(x = 6, statement1, statement2) blabla";
aber statement1 rekursiv eine andere sein, wenn Ausdruck, wie:
String expression = "blablaba iF(X = 6, if(X = 3, Z, Y), Y) bablabla";
in diesem Fall muss ich Z
extrahieren, oder zumindest if(X = 3, Z, Y)
ich gemacht, dass:
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) + ".");
}
}
Das Ergebnis ist:
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.
Kann mir jemand helfen, zumindest die Aussage zu extrahieren1 if(X = 3, Z, Y)
.
Danke, Nuno
Regex nicht rekursive Ausdrücke behandeln. Zumindest nicht in Java. Sie benötigen dafür einen geeigneten Parser. – RealSkeptic
Ich weiß das, aber was ich verlange, ist eine Regex zu haben, die die Anweisung1 extrahieren kann, in diesem Fall ist if (X = 3, Z, Y) –
Nun, wenn es rekursive Ausdrücke nicht analysieren kann, Woher weiß es, wann der interne Ausdruck endet? Was ist, wenn statt "Z" ein anderes "if" vorhanden ist? Du hast gesagt, es ist rekursiv. Daher kann es nicht mit einer Regex geparst werden. Daher kann eine Regex nicht mit dem gewünschten Teil übereinstimmen. – RealSkeptic