タグを含む文字列を分割する必要があります。たとえば:タグごとに異なる変数に文字列を分割する
String str = "This text is not highlighted <hlTag>but this is</hlTag> this"
+ " isn't again <hlTag>and this is</hlTag>";
問題は、私のパーサがタグ内であり、これではないどの部分、知っている必要がありますので、すべての部品は、(この例では、私はちょうどそれらをプリントアウト)異なる変数に保存されなければならないということです。
私はすでに解決策を持っていますが、両方のケースで2つの正規表現を使用していますが、単純化することができると思います。
EDITED
私は私の解決策が間違っていることに気づいた - 私は、部品の順序を失うと、私はそれを尊重する必要があります。私は文字列を一度解析し、タグ付きタグのない部分のためにパーツを別のオブジェクトに保存する必要があります(ハイライトされている場合は、list.add(新しいHighlPart(text))。そうでなければlist.add(new NonHighlPart(text))
誰でも助けてくれますか?
String preTag = "<hlTag>";
String postTag = "</hlTag>";
Matcher insideTagsMatcher = Pattern.compile(preTag + "(.+?)" + postTag).matcher(str);
Matcher outsideTagsMatcher = Pattern.compile("^(.*?)" + preTag +
"|" + postTag + "(.*?)" + preTag +
"|" + "</hlTag>(.*?)$").matcher(str);
System.out.println("Highlighted:");
while (insideTagsMatcher.find()) {
System.out.println(insideTagsMatcher.group(1));
}
System.out.println("\nNot highlighted:");
while (outsideTagsMatcher.find()) {
for (int i = 1; i <= outsideTagsMatcher.groupCount(); i++) {
// each pattern group returns two nulls except of string we need
if (outsideTagsMatcher.group(i) != null)
System.out.println(outsideTagsMatcher.group(i));
}
}
結果は次のとおりです。
Highlighted: but this is and this is Not highlighted: This text is not highlighted this isn't again
非常に単純な構文を除いて、Regexは厄介なパーサーです。実際のパーサーを使用してください。 – Andreas