RegEx拆分开/除外被[]包围

时间:2013-02-18 22:29:15

标签: java regex

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

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

然后我想在输出中返回以下内容

  • FOO
  • 巴[=驴特大/孔]

我已经看过其他几个类似的帖子,但我没有发现任何符合我正在尝试做的事情。我已经尝试过String.split()方法,如下所示,看到了奇怪的结果:

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

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

我需要做些什么来取回以下内容:

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

谢谢, 杰里米

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

在以下字符串中,下面的正则表达式将匹配 foo bar ,但不会匹配 fox baz ,因为他们紧随其后。研究消极的前瞻。

fox]foo/bar/baz]

正则表达式:

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