\begin{<word>}
入力文字列を <word> が "block"、"vers"、または "refr" で始まるブロックと終わるブロックに分割し、\end{<word>}
各ブロックで addBlock() を実行したいと考えています。これらのブロックを 2 つ含む文字列に対してこのメソッドを試行すると、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());
}
}