正则表达式匹配第一次出现相对于另一个模式的出现

时间:2016-10-16 20:16:16

标签: java regex

我有一个json,如果找不到占位符值,我需要从中替换整个参数。 例如 -

  

{“A”:{|“B”:“{0}”,| |“C”:“{1}”,| |“D”:“{2}”|}};

在这个json中,如果找不到占位符1的替换,我想删除

  

|“C”:“{1}”,|

当我使用这个正则表达式时 - (\|.*)(\{1}",\|)

上一个参数也匹配 -

  

|“B”:“{0}”,| |“C”:“{1}”,|

如何使用它的懒惰版本来获得所需的结果? 感谢

1 个答案:

答案 0 :(得分:0)

假设我正确理解了问题:懒惰(或不情愿)量词(即使用.*?代替.*)不会给你你想要的东西。这是因为模式匹配仍然是从左到右。因此,当匹配器看到第一个|时,它将找到它可以找到下一个{1}的最小字符数。由于它是一个不情愿的量词,它会在找到{1}之前寻找最小数量的字符,而不是最大的字符。但这对您没有帮助,因为它仍在从错误的初始|进行搜索。

这里的解决方案是要意识到匹配除了第一个和最后一个字符之外不能有|。因此,请使用排除.*的模式而不是|

(\|[^|]*)(\{1}",\|)