Я хочу, чтобы разбить входную строку на блоки, начиная с \begin{<word>}
и заканчивая \end{<word>}
где < слово > может быть «блок», «верс» или «REFR» и сделать addBlock() для каждого блока. При попытке этого метода в строке, содержащей два из этих блоков, m.groupCount()
правильно возвращает 2, но m.find()
возвращает false. Как это может быть? m.group()
выдает исключение.Сличитель groupCount() и найти() не складываются
private void addBlocks(String in) {
Pattern p = Pattern.compile("\\\\begin\\{(vers|refr|block)\\}.*\\\\end\\{(vers|refr|block)\\}");
Matcher m = p.matcher(in);
while (m.find()) {
addBlock(m.group());
}
}
Edit: Да, там было несколько вещей неправильно там. Regex - это боль в попке, это не очень интуитивно, и в этом нет никакой разумной помощи. Вот код, который наконец-то работал:.
private void addBlocks(String in) {
Pattern p = Pattern.compile("\\\\begin\{(block|vers|refr)\\}(.|$)*?\\\\end\\{(block|vers|refr)\\}", Pattern.DOTALL);
Matcher m = p.matcher(in);
while (m.find()) {
addBlock(m.group());
}
}