我想将输入字符串拆分为以<word> 可以是“block”、“vers”或“refr”开头\begin{<word>}
和结尾的块,并在每个块上执行 addBlock()。\end{<word>}
在包含其中两个块的字符串上尝试此方法时,m.groupCount()
正确返回 2,但m.find()
返回 false。怎么会这样?m.group()
抛出异常。
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());
}
}
编辑:是的,那里有几件事不对劲。正则表达式很麻烦,它不是很直观,而且在线也没有太多明智的帮助。这是最终起作用的代码:
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());
}
}