这是输入字符串:
"\"C:\\Users\\Administrator\\ram\\Microsoft\\19.070.0410.0007\remoteAccess.dll\""
我想为远程访问转义“\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
似乎最清晰。两种解决方案都不计算连续的反斜杠,无论是奇数还是偶数都会有所不同。
但非正则表达式版本更安全,因为它会替换,然后在替换后继续。
关于java - 如何转义回车符但跳过java中已经转义的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58841427/