2013-02-18 42 views
3

包圍我試圖在Java上拆分字符串/但我需要忽略在[]之間找到/的任何實例。例如,如果我有以下字符串RegEx拆分/除非被[]

/foo/bar[donkey=King/Kong]/value 

然後我想回到我的輸出以下

  • 條[驢=王/香港]

我已經看過其他類似的帖子,但是我還沒有找到任何符合我想要做的事情。我已經試過String.split()方法如下,看到怪異的結果:

Code: value.split("/[^/*\\[.*/.*\\]]") 

Result: [, oo, ar[donkey=King, ong], alue] 

我需要什麼才能回到做到以下幾點:

Desired Result: [, foo, bar[donkey=King/Kong], value] 

謝謝, 傑里米

回答

2

你需要分割的/後跟0以上平衡雙括號

String str = "/foo/bar[donkey=King/Kong]/value"; 

String[] arr = str.split("/(?=([[^\\[\\]]*\\[[^\\[\\]]*\\])*[^\\[\\]]*$)");  
System.out.println(Arrays.toString(arr)); 

輸出:

[, foo, bar[donkey=King/Kong], value] 

更加用戶友好的解釋

String[] arr = str.split("(?x)/"  + // Split on `/` 
        "(?="    + // Followed by 
        " ("    + // Start a capture group 
        "  [^\\[\\]]*" + // 0 or more non-[, ] character 
        "  \\["  + // then a `[` 
        "  [^\\]\\[]*" + // 0 or more non-[, ] character 
        "  \\]"   + // then a `]` 
        " )*"    + // 0 or more repetition of previous pattern 
        " [^\\[\\]]*"  + // 0 or more non-[, ] characters 
        "$)");     // till the end 
+0

看來,這不是OP想... – Kent 2013-02-18 22:37:40

+0

在正則表達式稍有不慎。現在更正。 – 2013-02-18 22:38:47

+0

我需要保留括號內的/。在提供的解決方案中,/將消失。提供的解決方案與我見過的str.split(「/」)完全一樣。 – jwmajors81 2013-02-18 22:40:28

0

以下字符串,正則表達式下面將匹配酒吧,但不狐狸baz,因爲它們後面緊跟着一個括號。研究負面的前瞻。

fox]foo/bar/baz] 

正則表達式:

\b(\w+)\b(?!])