regex - 从 Groovy 表达式内部双重转义正则表达式

标签 regex string groovy escaping double-quotes

注意:我必须简化我的实际用例,以节省大量背景故事。因此,如果您对这个问题的第一 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/

相关文章:

hibernate - 避免在grails中加入表

grails - grails中设置Quartz的repeatInterval的值

java - 使用正则表达式分析Java中的字符串

regex - Delphi中使用正则表达式提取字符串

string - R:如何替换字符串中的第 5 个元素?

C# split 函数不起作用

java - 将多个定界符传递给 StringTokenizer 构造函数

python - 如何多次将特定序列与字符串分开?

java - Eclipse Translator App - 单独翻译单词 - 不包含前面或后面的字符

java - Groovy 的最低 JDK