Строка Java разделения регулярного выражения незахватывающие группы


Я пытаюсь разделить строку на "."за исключением тех случаев, когда часть строки находится в [], тогда я просто хочу вернуть то, что находится внутри скобок.

У меня есть следующая строка кода.
"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 2

1 ответ:

Для этого лучше всего использовать метод "найти", а не разбивать с помощью этого шаблона:

(?<=\\[)[^\\]]*(?=\\])|[^\\][.]+
Обратите внимание, что порядок альтернатив важен, потому что первый выигрывает. Так что (?<=\\[)[^\\]]*(?=\\]) должно быть до [^\\][.]+

Демо