题
我需要编写一个经常的表达,发现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
工作细的得到 "\/"
在模式正确的匹配一个单一的 "/"
不隶属于 StackOverflow