这里是输入字符串:
""C:\Users\Administrator\ram\Microsoft\19.070.0410.0007remoteAccess.dll""
我想为remoteAccess转义'\r',但在\ram中保留一个,所以结果应该如下所示:
""C:\Users\Administrator\ram\Microsoft\19.070.0410.0007\remoteAccess.dll""
我试过StringEscapeUtils
,但它逃脱了一切。在java:中,负面查找似乎不起作用
String sub = resp.replaceAll("(?<!\)\r", "\\r");
产生
Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed group near index 8
(?<!)r
有什么想法吗?
问题是在正常字符串中,被转义为
\
,而在正则表达式中转义的反斜杠必须写成\\
。如果有两个转义反斜杠。。。
// String as in java source: \ is actualy a , " actually a ".
String resp = ""\"C:\\Users\\Administrator\\ram\\Microsoft\\"
+ "19.070.0410.0007\remoteAccess.dll\""";
System.out.println(resp); // The input as you did show.
// Regex solution:
String sub = resp.replaceAll("(?<!\\)\\r", "\\\\r");
String sub = resp.replaceAll("(?<!\\)\\(\w)", "\\\\$1");
System.out.println(sub);
// Simple string replace:
String sub2 = resp.replace("\\", "\").replace("\", "\\");
sub2 = sub2.replace("\\"", "\""); // Undo for "
System.out.println(sub2);
非正则表达式的简单字符串replace
似乎最清晰。这两种解决方案都不计算连续的反斜杠,它是奇数还是偶数都有区别。但非正则表达式版本更安全,因为它进行了替换,然后在替换后继续。