我正在尝试在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]
谢谢, 杰里米
答案 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(?!])