java中的正则表达式替换字符串,如下所述

时间:2014-05-27 08:12:16

标签: java regex replace

<#if ${x} == 'abc' > ${add} <#else if ${y} == 'dfg' > bef </#if>

在此,我要删除${}内的所有<>。 ,我怎么能在java中做到这一点? 预期的产出应该是

 <#if x == 'abc' > ${add} <#else if y == 'dfg' > bef </#if>

1 个答案:

答案 0 :(得分:2)

你可以试试这个:

String str = "<#if ${x} == 'abc' > ${add} <#else if ${y} == 'dfg' > bef </#if>";
System.out.println(str.replaceAll("(<#.+?)\\$\\{(.+?)\\}(.+?>)", "$1$2$3"));     

收率:

<#if x == 'abc' > ${add} <#else if y == 'dfg' > bef </#if>       

正则表达式可用解释here

编辑: 我已经做了一些修正,以及我如何假设else将被实施。代码应该可以解决问题:

String str = "<#if ${x} || ${z} > ${add} <#else if ${y} == 'dfg' && ${x} == 'abx'> bef <#else if ${y} == 'dfg' > sdadas <#else> ${foo}</#if>";
System.out.println(str.replaceAll("(?<=(?!<#else>)<#|\\|\\||&&)(.+?)\\$\\{(.+?)\\}", "$1$2"));  

鉴于此:

<#if ${x} || ${z} > ${add} <#else if ${y} == 'dfg' && ${x} == 'abx'> bef <#else if ${y} == 'dfg' > sdadas <#else> ${foo}</#if>

收率:

<#if x || z > ${add} <#else if y == 'dfg' && x == 'abx'> bef <#else if y == 'dfg' > sdadas <#else> ${foo}</#if>