2017-06-21 39 views
-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)

感謝, 努諾

+0

正則表達式不能處理遞歸表達式。至少不在Java中。你需要一個適當的解析器。 – RealSkeptic

+0

我知道,但我要求的是有一些正則表達式可以提取statement1,在這種情況下是 如果(X = 3,Z,Y) –

+0

那麼,如果它不能解析遞歸表達式,它如何知道內部表達式何時結束?如果不是'Z',你有另一個'if'?你說它是遞歸的。因此它不能用正則表達式解析。因此,正則表達式不能匹配你想要的部分。 – RealSkeptic

回答

0

嘗試,如果下面的正則表達式爲你的作品,它將匹配您的例子statement1Z

正則表達式只是看if語句匹配,那麼該做的第二個參數不包含,

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

demo

+0

非常感謝,對我來說就夠了。 –