問題の仕様はあまり明確ではありませんが、うまくいくかもしれないいくつかのアイデアを次に示します。
ルックアラウンドを使用し、replaceAll/First
次の正規表現\w+
は、前に string が"{item "
あり、後ろにstring が続く に一致します" ["
。ルックアラウンドは、唯一のものと正確に一致させるために使用され\w+
ます。メタ文字{
と[
必要に応じてエスケープされます。
String text =
"Person item6 [can {item thing [wrap]}]\n" +
"Cat item7 [meow meow {item thang [purr]}]\n" +
"Dog item8 [maybe perhaps {itemmmm thong [woof]}]" ;
String LOOKAROUND_REGEX = "(?<=\\{item )\\w+(?= \\[)";
System.out.println(
text.replaceAll(LOOKAROUND_REGEX, "STUFF")
);
これは以下を出力します:
Person item6 [can {item STUFF [wrap]}]
Cat item7 [meow meow {item STUFF [purr]}]
Dog item8 [maybe perhaps {itemmmm thong [woof]}]
参考文献
ルックアラウンドの代わりにキャプチャ グループを使用する
ルックアラウンドは慎重に使用する必要があります。特に Java での後読みは非常に限られています。より一般的に適用される手法は、キャプチャ グループを使用して、興味深い部分以上のものを照合することです。
次の正規表現は、前の同様のパターンに一致しますが、接頭辞と接尾辞\w+
も含まれています。さらに、inは無制限に繰り返すことができます (Java の後読みでは一致できないもの)。"{item "
" ["
m
item
String CAPTURING_REGEX = "(\\{item+ )(\\w+)( \\[)";
System.out.println(
text.replaceAll(CAPTURING_REGEX, "$1STUFF$3")
);
これは以下を出力します:
Person item6 [can {item STUFF [wrap]}]
Cat item7 [meow meow {item STUFF [purr]}]
Dog item8 [maybe perhaps {itemmmm STUFF [woof]}]
パターンには 3 つのキャプチャ グループがあります。
(\{item+ )(\w+)( \[)
\________/\___/\___/
group 1 2 3
"STUFF"
いくつかの「余分な」部分に一致するため、一致したものを単純に置き換えることはできないことに注意してください。それらを置き換えることには興味がないので、これらの部分をキャプチャして、単に置換文字列に戻します。Java の置換文字列でグループがキャプチャしたものを参照する方法は、$
シジルを使用することです。したがって、上記の例では$1
andです。$3
参考文献
を使用しMatcher
て柔軟性を高める
置換文字列ですべてを実行できるわけではありません。たとえば、Java には、キャプチャされた文字列を大文字にする後処理がありません。Matcher
これらのより一般的な置換シナリオでは、次のようなループを使用できます。
Matcher m = Pattern.compile(CAPTURING_REGEX).matcher(text);
StringBuffer sb = new StringBuffer();
while (m.find()) {
System.out.println("Match found");
for (int i = 0; i <= m.groupCount(); i++) {
System.out.printf("Group %d captured <%s>%n", i, m.group(i));
}
m.appendReplacement(sb,
String.format("%s%s %<s and more %<SS%s",
m.group(1), m.group(2), m.group(3)
)
);
}
m.appendTail(sb);
System.out.println(sb.toString());
上記のプリント:
Match found
Group 0 captured <{item thing [>
Group 1 captured <{item >
Group 2 captured <thing>
Group 3 captured < [>
Match found
Group 0 captured <{item thang [>
Group 1 captured <{item >
Group 2 captured <thang>
Group 3 captured < [>
Match found
Group 0 captured <{itemmmm thong [>
Group 1 captured <{itemmmm >
Group 2 captured <thong>
Group 3 captured < [>
Person item6 [can {item thing thing and more THINGS [wrap]}]
Cat item7 [meow meow {item thang thang and more THANGS [purr]}]
Dog item8 [maybe perhaps {itemmmm thong thong and more THONGS [woof]}]
参考文献
付属品