在特定字符Java之前插入字符

时间:2014-04-23 14:10:14

标签: java regex string

我一直在研究正则表达式以及如何在Java中使用它来解决我必须解决的问题。我必须在每\之前插入一个"。这就是我所拥有的:

public class TestExpressions {
    public static void main (String args[]) {

        String test = "$('a:contains(\"CRUCERO\")')";
        test = test.replaceAll("(\")","$1%");
        System.out.println(test);
    }
}

输出是:

$('a:contains("%CRUCERO"%)')

我想要的是:

$('a:contains(\"CRUCERO\")')

我已为%更改\\,但错误StringIndexOutofBounds不知道原因。如果有人可以帮助我,我将不胜感激,谢谢你。

4 个答案:

答案 0 :(得分:1)

如果要在引用前插入退格键,请使用:

test = test.replaceAll("(\")","\\\\$1"); // $('a:contains(\"CRUCERO\")')

或者如果你想避免已经转义的报价,那么使用负面的lookbehind:

String test = "$('a:contains(\\\"CRUCERO\")')";
test = test.replaceAll("((?<!\\\\)\")","\\\\$1"); // $('a:contains(\"CRUCERO\")')

答案 1 :(得分:1)

String result = subject.replaceAll("(?i)\"CRUCERO\"", "\\\"CRUCERO\\\"");

<强>说明

Match the character string “"CRUCERO"” literally (case insensitive) «"CRUCERO"»
Ignore unescaped backslash «\»
Insert the character string “"CRUCERO” literally «"CRUCERO»
Ignore unescaped backslash «\»
Insert the character “"” literally «"»

答案 2 :(得分:1)

如果您的目标是Java字符串的转义文本,那么请考虑使用

而不是正则表达式
String escaped = org.apache.commons.lang.StringEscapeUtils.
   escapeJava("$('a:contains(\"CRUCERO\")')");
System.out.println(escaped);

输出:

$('a:contains(\"CRUCERO\")')

JavaDoc:http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringEscapeUtils.html#escapeJava(java.lang.String)

答案 3 :(得分:0)

  

我必须在每\

之前插入"

您可以尝试使用replace自动转义所有正则表达式元字符,并且不使用替换部分中的任何特殊字符,这样您就可以简单地使用要放入匹配部分的字符串文字。

因此,我们只需将"替换为\"字面值即可。你可以把它写成

test = test.replace("\"", "\\\"");