在一个字符串中,我想用其第三个方块字符串替换方括号内的所有单词

时间:2019-04-11 09:25:48

标签: java regex

我有一个类似" 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\]\.[^\]]*]\.\[(.*?(?=\]))]",但是我想不出一种方法来解决我的问题,而不必遍历每个匹配的子字符串。

1 个答案:

答案 0 :(得分:4)

您可以使用

\[phy\]\[[^\]\[]*\]\[([^\]\[]*)\]

,并替换为$1。请参见regex demoRegulex graph

enter image description here

详细信息

  • \[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