我想要转义字符串的所有引号(单引号和双引号)和反斜杠。
我试图通过调用myString.replaceAll来做到这一点。匹配和替换的正则表达式是(?=['\"\\\\])
(转义的Java语法),或者更具可读性:(?=['!\])
(非转义语法)。
我做了一个先行,因为我想保留那些引号和反斜杠,只需在它们之前插入一个转义字符。
如果我使用+
作为转义字符,那么一切都像魅力(下面的所有字符串都是转义的Java语法):
"abc'def\"ghi\\jkl".replaceAll("(?=['\"\\\\])", "+")
会产生"abc+'def+\"ghi+\\jkl"
。耶!
但是,如果我使用反斜杠作为转义字符,我会得到一个StringIndexOutOfBoundsException:String index out of range: 1
。
电话看起来像这样:
"abc'def\"ghi\\jkl".replaceAll("(?=['\"\\\\])", "\\\\")
奇怪的是......插入的反斜杠会以某种方式干扰前瞻性正则表达式中的反斜杠吗?如果是这样,我该如何避免这种行为?
以下是完整的测试代码:
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
public class RegexTest {
@Test public void test() {
assertEquals("abc\\'def\\\"ghi\\\\jkl", "abc'def\"ghi\\jkl".replaceAll("(?=['\"\\\\])", "\\\\"));
}
}
非常感谢任何帮助!