2016-01-23 173 views
2

我必须用中的'\'替换所有出现的'\''\'。我知道正则表达式"\\\\"意味着\,但我如何编写replaceAll()的正则表达式来匹配'\''\'。我试过:正则表达式匹配连续出现的两个反斜杠?

.replaceAll("\\\\\\\\", "\\") 

但我得到一个java.util.regex.PatternSyntaxException?

+0

您可以使用'“\\ {2}”'或''\\\\'''正则表达式模式。甚至可以用“\\ +”来匹配每个连续出现的至少2个反斜杠。 – AndrewMcCoist

+1

@AndrewMcCoist不完全。 ''''在正则表达式和字符串文字中是特殊的。因此,要编写可以表示正则表达式匹配''''''的字符串,我们需要在正则表达式中''\\'''中退出一次,并且在字符串'“\\\\''中一次。 – Pshemo

+0

哦。对,忘了它是在Java中的字符串:) 我在大多数情况下在Oracle SQL中使用正则表达式,它在那里更实用。 – AndrewMcCoist

回答

3

如果您要更换的,而不是replaceAll使用replace方法不使用正则表达式的语法文字:

replace("\\\\", "\\") 

如果你绝对必须使用replaceAll记得它的第二个参数也有一些特殊的字符,这是

  • $(其中$x表示选自组x匹配)
  • \能摆脱$和本身

所以使用replaceAll需要看起来像代码:

replaceAll("\\\\\\\\", "\\\\") 

,因为我们还需要在正则表达式引擎\\逃脱\两次(一次,一次字符串\\\\)。

+0

我试过了,得到:java.util.regex.PatternSyntaxException:在索引1附近有非法重复问题 –

+0

@someone_somewhere是否从'replaceAll'中删除了'All'后缀? – Pshemo

+0

对不起,我有: \t \t validElement = validElement.replaceAll(“\\\\ {”,“{”).replace(“\\\\”,“\\”);因此它在第一部分打破了。 .replace(“\\\\”,“\\”)工作:) 谢谢。 –

相关问题