Java Regex在String中替换(File.Separator或forwardslash(/)或反斜杠(\\))的第一次出现

时间:2016-11-26 20:05:04

标签: java regex

我想做标题所说的内容,虽然我知道如何使用以下代码完成:

(其中local是表示路径的变量):

String path = ( local.startsWith(File.separator) || local.startsWith("/") || local.startsWith("\\"))
                ? local.substring(File.separator.length(), local.length())
                : local;

我需要将上面的内容转换为regex表达式,所以我正在使用:

path = local.replaceFirst("[" + File.separator + "/\\]", "");

来自xml schema我正在使用正则表达式并查看教程here,在我看来它必须有效,但它根本没有,我得到这个错误 - > :

java.util.regex.PatternSyntaxException: Unclosed character class near index 4
[\/\]
    ^

如果我将代码更改为以下代码,则可以:

 local.replaceFirst("[" + File.separator + "/\\Q \\ \\E]", "");

Here\是一个特殊字符,但是:

有两种方法可以强制将元字符视为普通字符:

  • 在元字符前面加一个反斜杠或
  • 将其包含在\ Q(开始引用)和\ E(结束它)中。

还提到了这个问题:Forward slash in Java Regex

1 个答案:

答案 0 :(得分:0)

错误是:

只需使用\\,它就会被\取代,所以我只有特殊字符。

解决方案是使用\\\\,因此它被\\替换,第一个\将第二个\视为字符,而不是特殊字符。

如果有人遇到同样的问题,请留下此解决方案。