-2
我有這種情況,我想提取該字符串表達式的statement1,但我不是正則表達式的專家。Java正則表達式,提取第二條語句
String expression = "blabla if(x = 6, statement1, statement2) blabla";
但語句1可以是遞歸另一個如果表達,如:
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) + ".");
}
}
:
String expression = "blablaba iF(X = 6, if(X = 3, Z, Y), Y) bablabla";
在這種情況下我需要提取
Z
,或至少
if(X = 3, Z, Y)
我提出,
結果是:
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 if(X = 3, Z, Y)
。
感謝, 努諾
正則表達式不能處理遞歸表達式。至少不在Java中。你需要一個適當的解析器。 – RealSkeptic
我知道,但我要求的是有一些正則表達式可以提取statement1,在這種情況下是 如果(X = 3,Z,Y) –
那麼,如果它不能解析遞歸表達式,它如何知道內部表達式何時結束?如果不是'Z',你有另一個'if'?你說它是遞歸的。因此它不能用正則表達式解析。因此,正則表達式不能匹配你想要的部分。 – RealSkeptic