Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式中的转义路径分隔符_Java_Regex_Escaping - Fatal编程技术网

Java 正则表达式中的转义路径分隔符

Java 正则表达式中的转义路径分隔符,java,regex,escaping,Java,Regex,Escaping,我需要编写一个正则表达式来查找匹配的javascript文件 <anypath><slash>js<slash><anything>.js 投掷 java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence 有没有办法使用一个在Windows和UNIX系统中都能工作的通用正则表达式?Pattern.quote(File.separator)能做到这一点吗

我需要编写一个正则表达式来查找匹配的javascript文件

<anypath><slash>js<slash><anything>.js
投掷

java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence
有没有办法使用一个在Windows和UNIX系统中都能工作的通用正则表达式?

Pattern.quote(File.separator)能做到这一点吗

编辑:这在Java1.5或更高版本中可用。对于1.4,只需转义文件分隔符字符:

"\\" + File.separator

转义标点符号不会破坏任何东西,但无条件转义字母或数字将改变它们的特殊含义或导致错误。(感谢您在评论中指出这一点!)

难道您不能像这样使用反斜杠来转义路径分隔符吗:

pattern = Pattern.compile(
     "^(.+?)\\" + 
     File.separator +
     "js\\" +
     File.separator +
     "(.+?).js$" );

为什么不转义
File.separator

... +
"\\" + File.separator +
...
符合
模式。是否编译
要求?

我希望“/”(unix case)作为单个“/”处理。

我已经在unix系统上测试了gimel的答案-放置
“\\\”+文件。分隔符
工作正常-模式中产生的
“\/”
正确匹配单个
“/”

有没有办法使用在Windows和UNIX系统中都能工作的通用正则表达式

是的,只需使用匹配这两种分隔符的正则表达式

pattern = Pattern.compile(
    "^(.+?)" + 
    "[/\\\\]" +
    "js" +
    "[/\\\\]" +
    "(.+?)\\.js$" );

它是安全的,因为Windows和Unix都不允许在文件或目录名中使用这些字符。

太好了,很遗憾,它只在Java 1.5+中可用(我仍然需要它在1.4中工作)。自Java 7以来,您可以使用
FileSystems.getDefault().getSeparator()
而不是
File.separator
@herau有区别吗?@Tomalak对于默认提供程序,此方法返回与File.separator相同的分隔符。但是,当您使用其他提供程序时,它可能会很有用。我更喜欢这个答案,因为它在windows和unix上本机适用于所有类型的正则表达式。例如,在Ant任务中,在接收到的答案中没有帮助器。实际上,我认为Linux在“文件或目录名中间”(不解释它与目录有任何关系)是可以的;是用户和文件系统的某些组合禁止了它。(我当然不希望任何文件或目录有这样的名称。)
pattern = Pattern.compile(
    "^(.+?)" + 
    "[/\\\\]" +
    "js" +
    "[/\\\\]" +
    "(.+?)\\.js$" );