我需要编写一个经常的表达,发现javascript匹配的文件

<anypath><slash>js<slash><anything>.js

例如,它应该为:

  • c:\mysite\js\common.js (Windows)
  • /var/www/mysite/js/common.js (UNIX)

问题是文件的分隔,在Windows是不正确的逃:

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

java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence

是否有任何方式使用共同经常表达这一工作在这两个窗口和UNIX系统?

有帮助吗?

解决方案

Pattern.quote(File.separator) 做的伎俩?

编辑:这是可作为Java1.5或以后。为1.4,你只需要逃脱的文件分隔char:

"\\" + File.separator

逃跑的标点符号不会破坏任何东西,但是逃离的字母或数字无条件地将他们改变他们的特殊的意义,或导致的一个 PatternSyntaxException. (谢谢 艾伦*米 指出在意见!)

其他提示

是否有任何方式使用共同经常表达这一工作在这两个窗口和UNIX系统?

是的,只是使用regex相匹配这两种类型的分离器。

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

这是安全的,因为既没窗也没有Unix许可证的那些人物在文件或目录的名称。

你就不能使用反斜杠,逃离的道路分隔,像这样:

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

你为什么不逃跑 File.separator:

... +
"\\" + File.separator +
...

以适合 Pattern.compile 要求吗?我希望"/"(unix情况)进行处理作为一个单一的"/".

我已经测试吉梅尔的答案在Unix系统上-把 "\\" + File.separator 工作细的得到 "\/" 在模式正确的匹配一个单一的 "/"

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top