Java 正则表达式中的正斜杠

2022-08-31 17:34:20

我无法弄清楚为什么下面的代码行为不符合预期

"Hello/You/There".replaceAll("/", "\\/");
  • 预期输出:Hello\/You\/There
  • 实际输出:Hello/You/There

我是否需要转义正斜杠?我不这么认为,但我也违背自己的意愿尝试了以下方法......不起作用

"Hello/You/There".replaceAll("\\/", "\\/");

最后,我意识到我不需要正则表达式,我只能使用以下内容,这不会创建正则表达式

"Hello/You/There".replace("/", "\\/");

但是,我仍然想了解为什么我的第一个示例不起作用。


答案 1

问题实际上是您需要在替换字符串中对反斜杠进行双重转义。你看,(我相信你知道)意味着替换字符串是,并且(你可能不知道)替换字符串实际上只是插入,因为Java很奇怪,并且在替换字符串中赋予了特殊的含义。(据说这将是一个字面上的美元符号,但我认为真正的原因是他们想惹人。其他语言不会这样做。所以你必须写:"\\/"\/\//\\$

"Hello/You/There".replaceAll("/", "\\\\/");

艺术

"Hello/You/There".replaceAll("/", Matcher.quoteReplacement("\\/"));

(使用 java.util.regex.Matcher.quoteReplacement(String)。)


答案 2

当显示为字符串时,需要双重转义。

每当我制作一个新的正则表达式时,我都会使用在线工具进行一堆测试,例如:http://www.regexplanet.com/advanced/java/index.html

该网站允许您输入正则表达式,它将为您转义为字符串,然后您可以针对不同的输入对其进行测试。