2014-12-11 2 views
2

Я пытаюсь разбить строку на "." кроме случаев, когда часть строки находится в [], я просто хочу вернуть то, что находится внутри скобок.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"] 

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

Просто чтобы прояснить массив я ожидаю Спинка

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

ответ

2

Чтобы сделать это, лучшим вариантом является использование метода «найти» вместо раскола с этим образец:

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

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

demo

+0

находку здесь будет соответствовать «» и вернуть их. Цель состоит в том, чтобы получить строки между ними. – Ervin

+0

@ tiger13cubed: обновите свой браузер. –

+0

Спасибо за вашу помощь Casmir :) Не решение, которое я имел в виду, но это трюк. В любом случае вы можете объяснить, что я делал неправильно с моим \\ [(? =. * \\]) регулярным выражением? – Ervin

 Смежные вопросы

  • Нет связанных вопросов^_^