如何在java中转义回车但跳过已转义的字符

  • 本文关键字:转义 字符 回车 java java regex
  • 更新时间 :
  • 英文 :


这里是输入字符串:

""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似乎最清晰。这两种解决方案都不计算连续的反斜杠,它是奇数还是偶数都有区别。但非正则表达式版本更安全,因为它进行了替换,然后在替换后继续

最新更新