注意:我必须简化我的实际用例,以节省大量背景故事。因此,如果您对这个问题的第一 react 是:您为什么要这样做,请相信我,我只是需要这样做。
我正在尝试编写一个 Groovy 表达式,用单引号 ("'
") 替换出现在字符串中的双引号 (""
") .
// BEFORE: Replace my "double" quotes with 'single' quotes.
String toReplace = "Replace my \"double-quotes\" with 'single' quotes.";
// Wrong: compiler error
String replacerExpression = "toReplace.replace(""", "'");";
Binding binding = new Binding();
binding.setVariable("toReplace", toReplace);
GroovyShell shell = new GroovyShell(binding);
// AFTER: Replace my 'double' quotes with 'single' quotes.
String replacedString = (String)shell.evaluate(replacerExpression);
问题是,我在分配 replacerExpression
的行上遇到编译错误:
Syntax error on token ""toReplace.replace("", { expected
我认为这是因为我需要转义包含双引号字符(“””)的字符串,但由于它是字符串内的字符串,我不确定如何在这里正确转义它。任何想法?
最佳答案
您需要转义此行中引号内的引号:
String replacerExpression = "toReplace.replace(""", "'");";
该字符串将被计算两次:一次作为字符串文字,一次作为脚本。这意味着您必须使用反斜杠对其进行转义,并且还要转义反斜杠。此外,由于嵌入了引号,如果您使用三引号,它的可读性会更高。
试试这个(在groovy中):
String replacerExpression = """toReplace.replace("\\"", "'");""";
在 Java 中,您只能使用反斜杠来转义所有引号和嵌入的反斜杠:
String replacerExpression = "toReplace.replace(\"\\\"\", \"\'\");";
关于regex - 从 Groovy 表达式内部双重转义正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19037031/