Frage

Ich muss einen regulären Ausdruck schreiben, der JavaScript -Dateien findet, die übereinstimmen

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

Zum Beispiel sollte es für beide funktionieren:

  • C: mySite js common.js (Windows)
  • /var/www/mysie/js/common.js (UNIX)

Das Problem ist, dass das Dateiabscheider in Windows nicht ordnungsgemäß entkommen wird:

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

Werfen

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

Gibt es eine Möglichkeit, einen gemeinsamen regulären Ausdruck zu verwenden, der sowohl in Windows- als auch in Unix -Systemen funktioniert?

War es hilfreich?

Lösung

Tut Pattern.quote(File.separator) Mache den Trick?

Bearbeiten: Dies ist ab Java 1.5 oder höher erhältlich. Für 1.4 müssen Sie einfach dem Dateitrennzeichen entkommen:

"\\" + File.separator

Die Flucht zwischen den Interpunktionsfiguren wird nichts brechen, sondern es wird sie entweder in ihre besondere Bedeutung wechseln oder zu einem von einem entkommen oder zu einem führen Mustersyntaxexception. (Vielen Dank Alan m für den Hinweis darauf in den Kommentaren!)

Andere Tipps

Gibt es eine Möglichkeit, einen gemeinsamen regulären Ausdruck zu verwenden, der sowohl in Windows- als auch in Unix -Systemen funktioniert?

Ja, verwenden Sie einfach einen Regex, der beide Arten von Separator entspricht.

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

Es ist sicher, weil weder Windows noch Unix diese Zeichen in einer Datei- oder einem Verzeichnisnamen ermöglichen.

Kannst du nicht einfach einen Backslash verwenden, um dem Pfadabscheider wie so zu entkommen:

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

Warum entkommst du nicht? File.separator:

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

passen Pattern.compile Bedarf? Ich hoffe, "/" (Unix -Fall) wird als einzelne "/" verarbeitet.

Ich habe Gimels Antwort auf ein Unix -System getestet - Puting "\\" + File.separator funktioniert gut - die resultierende "\/" im Muster passt korrekt mit einem einzigen überein "/"

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top