2016-01-23 180 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(「\\\\」,「\\」)工作:) 謝謝。 –

相關問題