我的理解是每个反斜杠都需要一个更多的反斜杠才能被正则表达式转义。我在Java中的下列输入字符串:Java实际上是否逃避反斜杠如何声称?
C:\\my\\drive\\application\\webapps\\ROOT\\classes\\there\\is\\a\\clazz
删除所有字符都classes\\
,我添加了以下的正则表达式中的Java replaceAll()
方法:
.*\\\\b(classes)(\\\\W\\\\S|\\\\/){1,2}\\\\b
为什么我添加了四条斜杠
一个反斜线以表明这是正则表达式
\\
一个反斜线,表明正则表达式输入将会为Java String
\\
。
但即使有一组双反斜杠\\
它不起作用。
当我在regexr和regexplanet上尝试它时,它似乎对文件路径的unix/windows类型都正常工作,并给了我想要的东西。它向我展示了正确的replaceAll()
结果。
但是当我把它放到代码中时,它根本不工作。
实际代码
String targetStr = someMethod.get(); // value is C:\\my\\drive\\application\\webapps\\ROOT\\classes\\there\\is\\a\\clazz
String replacedVal = targetStr.replaceAll(".*\\\\b(classes)(\\\\W\\\\S|\\\\/){1,2}\\\\b", "");
System.out.println(targetStr);
System.out.println(replacedVal); // same as targetStr i.e. nothing has been replaced
我们那么有多少次在Java中需要真正的逃避每个反斜线得到这个工作?
还有一个正则表达式,如果它们是字符串文字,那么这两个对于编译器就需要两个以上。 – EJP
@EJP已经尝试过。没有工作。我不确定问题描述是否清晰,因为人们在没有意识到问题出在哪里的情况下下了决心。 – ha9u63ar
看起来你可以通过使用'Path'类来轻松避免RegExp混淆... –