문제
일치하는 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
Windows 및 UNIX 시스템 모두에서 작동하는 일반적인 정규 표현식을 사용하는 방법이 있습니까?
해결책
하다 Pattern.quote(File.separator)
트릭을합니까?
편집 : 이것은 Java 1.5 이상으로 제공됩니다. 1.4의 경우 파일 분리기 char를 탈출하면됩니다.
"\\" + File.separator
구두점 캐릭터를 피하는 것은 아무것도 깨뜨리지 않지만, 편지 나 숫자를 피하는 것은 무조건적으로 그들의 특별한 의미로 바꾸거나 PatternSynTaxException. (감사 앨런 m 의견에 이것을 지적하기 위해!)
다른 팁
Windows 및 UNIX 시스템 모두에서 작동하는 일반적인 정규 표현식을 사용하는 방법이 있습니까?
예, 두 종류의 분리기와 일치하는 정규식을 사용하십시오.
pattern = Pattern.compile(
"^(.+?)" +
"[/\\\\]" +
"js" +
"[/\\\\]" +
"(.+?)\\.js$" );
Windows 나 Unix는 해당 문자를 파일 또는 디렉토리 이름으로 허용하지 않기 때문에 안전합니다.
Backslash를 사용하여 경로 분리기를 피할 수는 없습니다.
pattern = Pattern.compile(
"^(.+?)\\" +
File.separator +
"js\\" +
File.separator +
"(.+?).js$" );
탈출하지 않는 이유 File.separator
:
... +
"\\" + File.separator +
...
적합합니다 Pattern.compile
요구 사항? "/"(Unix Case)가 단일 "/"로 처리되기를 바랍니다.
유닉스 시스템에서 Gimel의 답변을 테스트했습니다. "\\" + File.separator
잘 작동합니다 - 결과 "\/"
패턴에서 단일과 올바르게 일치합니다 "/"