我需要编写一个正则表达式来查找匹配
的javascript文件<anypath><slash>js<slash><anything>.js
例如,它应该适用于:
问题是Windows中的文件分隔符未正确转义:
pattern = Pattern.compile(
"^(.+?)" +
File.separator +
"js" +
File.separator +
"(.+?).js$" );
投掷
java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence
有没有办法使用适用于Windows和UNIX系统的通用正则表达式?
答案 0 :(得分:13)
Pattern.quote(File.separator)
能做到这一点吗?
编辑:从Java 1.5或更高版本开始提供。对于1.4,您只需要转义文件分隔符char:
"\\" + File.separator
转义标点字符不会破坏任何内容,但无条件地转义字母或数字会将其更改为其特殊含义或导致PatternSyntaxException。 (感谢Alan M在评论中指出这一点!)
答案 1 :(得分:5)
有没有办法使用适用于Windows和UNIX系统的通用正则表达式?
是的,只需使用匹配两种分隔符的正则表达式。
pattern = Pattern.compile(
"^(.+?)" +
"[/\\\\]" +
"js" +
"[/\\\\]" +
"(.+?)\\.js$" );
这是安全的,因为Windows和Unix都不允许文件或目录名中的这些字符。
答案 2 :(得分:2)
你不能像这样使用反斜杠来转义路径分隔符:
pattern = Pattern.compile(
"^(.+?)\\" +
File.separator +
"js\\" +
File.separator +
"(.+?).js$" );
答案 3 :(得分:1)
为什么不逃避File.separator
:
... +
"\\" + File.separator +
...
符合Pattern.compile
要求?
我希望“/”(unix case)作为单个“/".
答案 4 :(得分:0)
我在Unix系统上测试了gimel的答案 - 让"\\" + File.separator
正常工作 - 模式中生成的"\/"
正确匹配单个"/"