문제

일치하는 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 잘 작동합니다 - 결과 "\/" 패턴에서 단일과 올바르게 일치합니다 "/"

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top