gpt4 book ai didi

java - 仅在尚未转义时才转义反斜杠

转载 作者:行者123 更新时间:2023-11-30 06:15:07 26 4
gpt4 key购买 nike

非常简单的测试:

String value = "Test escape single backslash C:\\Dir  [Should not escape \\\\characters here\\\\]";
String result = value.replaceAll(Pattern.quote("\\"), Matcher.quoteReplacement("\\\\"));
System.out.println(value);
System.out.println(result);

我得到了输出:

Test escape single backslash C:\Dir  [Should not escape \\characters here\\]
Test escape single backslash C:\\Dir [Should not escape \\\\characters here\\\\]

将表达式更改为:

"(?<![\\\\])"+Pattern.quote("\\")

String result = value.replaceAll("(?<![\\\\])"+Pattern.quote("\\"), Matcher.quoteReplacement("\\\\"));

给我:

Test escape single backslash C:\Dir  [Should not escape \\characters here\\]
Test escape single backslash C:\\Dir [Should not escape \\\characters here\\\]

这很接近,但没有雪茄。

我错过了什么?

预期输出:

Test escape single backslash C:\\Dir  [Should not escape \\characters here\\]

最佳答案

怎么样

String result = value.replaceAll("\\\\{1,2}",  Matcher.quoteReplacement("\\\\"));

想法是让匹配器使用两个 \ 字面量并且不更改它们(用它们自己替换它们 Matcher.quoteReplacement("\\\\"))但是如果只找到一个 \ 文字也将其替换为两个 \ \ (与第一种情况相同的替换)。

有点像

\\\
^^ - replace with `\\`
^ - also replace with `\\`

关于java - 仅在尚未转义时才转义反斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29280870/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com