Java Regex中的正斜杠

时间:2012-03-05 22:36:13

标签: java regex

我无法弄清楚为什么下面的代码没有按预期运行

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

我需要向前逃避斜线吗?我不这么认为,但我也违背了我的意愿尝试了以下......没有工作

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

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

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

但是,我仍然想知道为什么我的第一个例子不起作用。

3 个答案:

答案 0 :(得分:74)

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

\$

或:

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

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

答案 1 :(得分:1)

以字符串形式显示时需要双重转义。

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

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

答案 2 :(得分:0)

实际上,为什么所有这些都搞砸了,实际上有一个原因。在this thread中进行了更深入的挖掘,可能有助于理解为什么" \\"表现得像这样。