Java字符串拆分正则表达式非捕获组

时间:2014-12-11 19:00:25

标签: regex-greedy capturing-group regex-group

我正在尝试将字符串拆分为“。”除非字符串的一部分在[]中,否则我只想返回括号内的内容。

我有以下代码行。

"blah.blah[http://blah.blah.com/blah/blah#]".split(("(\\.|\\[(?=.*\\]))")

返回

 [ "blah", "blah", "http:blah", "blah", "com/blah/blah#]" ]

如果我尝试

"blah.blah[http://blah.blah.com/blah/blah#]".split(("(\\.|\\[(?:.*\\]))")

我得到了

["blah", "blah"]

我不确定我需要如何定义我的非捕获组,以便它在第一次分割时[但在捕获之后不包括任何内容]

只是为了澄清我期待的阵列

["blah", "blah", "http://blah.blah.com/blah/blah#"]

1 个答案:

答案 0 :(得分:2)

要做到这一点,最好的选择是使用“查找”方法而不是使用此模式进行拆分:

(?<=\\[)[^\\]]*(?=\\])|[^\\][.]+

请注意,替代品的顺序很重要,因为第一场胜利。因此(?<=\\[)[^\\]]*(?=\\])必须在[^\\][.]+之前

demo