在gradle中使用String.ReplaceAlli缺少要转义的字符

时间:2018-05-23 07:29:12

标签: java gradle groovy

我在gradle文件任务中有以下语句,但是它提供了错误'要转义的字符缺失'执行时。

String contents = new File( 'settings/tomcat-config/catalina.bat' ).getText()
contents = contents.replaceAll('-Dappspace.home=[^\"]*','test');

似乎微不足道,但无法弄清楚问题。

enter image description here

1 个答案:

答案 0 :(得分:0)

假设您的catalina.bat文件包含以下行:

set APP_HOME=-Dappspace.home="%CATALINA_BASE%\somedir"

然后你想在比赛中加入"。换句话说,运行:

def contents = new File('catalina.bat').text
println contents.replaceAll('-Dappspace.home="([^"]+)"','test')

将打印:

set APP_HOME=test

然后跑步:

def contents = new File('catalina.bat').text
println contents.replaceAll(/(-Dappspace.home=")([^"]+)/, '$1test')    

将打印:

set APP_HOME=-Dappspace.home="test"

我怀疑它更接近你想要的东西。如果您想替换文件内容,您可以这样做:

def file = new File(...)
file.text = file.text.replaceAll(...)

由于这是在gradle文件中,您可以使用gradle dsl project.file方法并在代码中将new File(...)替换为file(...),这样就会为我们提供最终版本(假设您正在寻找替换文件内容中的字符串):

def f = file('catalina.bat')
f.text = f.text.replaceAll(/(-Dappspace.home=")([^"]+)/, '$1test')