我有一个类似" case 1 is good [phy][hu][get] my dog is [hy][iu][put] [phy][hu][gotcha]"
我希望结果字符串为" case 1 is good get my dog is [hy][iu][put] gotcha "
基本上,我希望将格式[phy][.*][.*]
的所有子字符串替换为最后一个(第三个)方括号的内容。
我尝试使用此正则表达式模式"\[phy\]\.[^\]]*]\.\[(.*?(?=\]))]"
,但是我想不出一种方法来解决我的问题,而不必遍历每个匹配的子字符串。
答案 0 :(得分:4)
您可以使用
\[phy\]\[[^\]\[]*\]\[([^\]\[]*)\]
,并替换为$1
。请参见regex demo和Regulex graph:
详细信息
\[phy\]
-[phy]
子字符串\[
-[
字符[^\]\[]*
-除[
和]
以外的0个或更多字符\]
-一个]
字符\[
-[
字符([^\]\[]*)
-捕获与$1
和[
以外的零个或多个字符匹配的第1组(]
是其在替换模式中的值)\]
-一个]
字符Java用法demo
String input = "case 1 is good [phy][hu][get] my dog is [hy][iu][put] [phy][hu][gotcha]";
String result = input.replaceAll("\\[phy]\\[[^\\]\\[]*]\\[([^\\]\\[]*)]", "$1");
System.out.println(result);
// => case 1 is good get my dog is [hy][iu][put] gotcha