3

我正在尝试在 / 上拆分 Java 中的字符串,但我需要忽略在 [] 之间找到 / 的任何实例。例如,如果我有以下字符串

/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]

谢谢,杰里米

4

2 回答 2

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
于 2013-02-18T22:31:54.947 回答
0

在以下字符串中,下面的正则表达式将匹配foobar,但不匹配foxbaz,因为它们后跟一个右括号。研究负前瞻。

fox]foo/bar/baz]

正则表达式:

\b(\w+)\b(?!])
于 2013-02-19T00:31:39.230 回答