2008-10-28 5 views
11

ich einen regulären Ausdruck zu schreiben, müssen die Javascript-Dateien findet, dieFluchtweg Separator in einem regulären Ausdruck

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

Zum Beispiel passen, sollte es für beide arbeiten:

  • c: \ mysite \ js \ common.js (Windows)
  • /var/www/mysite/js/common.js (UNIX)

Das Problem ist, dass die Datei Separator in Windows nicht richtig übersetzt werden:

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, die in Windows und UNIX-Systemen funktionieren?

Antwort

12

Macht Pattern.quote(File.separator) den Trick?

EDIT: Dies ist ab Java 1.5 oder höher verfügbar. Für 1.4, müssen Sie einfach die Datei Separator char entkommen:

"\\" + File.separator 

Interpunktionszeichen Escaping wird nichts kaputt machen, sondern Buchstaben oder Zahlen zu entkommen bedingungslos entweder sie auf ihre besondere Bedeutung ändern oder zu einem PatternSyntaxException führen. (! Dank Alan M für diese zeigt in den Kommentaren out)

+0

Großartig, schade, dass es nur seit Java 1.5+ verfügbar ist (ich brauche es noch in 1.4) –

+0

seit Java 7 können Sie 'FileSystems.getDefault(). GetSeparator()' anstelle von 'File verwenden. separator' – herau

+0

@herau Gibt es einen Unterschied? – Tomalak

2

Kannst du nicht einfach einen umgekehrten Schrägstrich verwenden Sie den Pfad-Separator wie so zu entkommen:

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

Warum Sie File.separator nicht entkommen:

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

Pattern.compile Anforderungen passen? Ich hoffe, "/" (Unix-Fall) wird als eine einzige "/" verarbeitet.

0

Ich habe gimel Antwort auf einem Unix-System getestet - "\\" + File.separator setzen funktioniert gut - die resultierenden "\/" in dem Muster richtig ein Spiel Einzel "/"

5

Gibt es eine Möglichkeit, einen gemeinsamen regulären Ausdruck zu verwenden, das funktioniert in Windows- und UNIX-Systeme?

Ja, verwenden Sie einfach eine Regex, die beide Arten von Separator entspricht.

Es ist sicher, da weder Windows noch Unix diese Zeichen in einem Datei- oder Verzeichnisnamen zulässt.

+0

Ich mag diese Antwort mehr, da es nativ mit allen Arten von regulären Ausdrücken sowohl unter Windows als auch unter Unix funktioniert. Zum Beispiel in Ameisen-Aufgaben, wo Sie keine Helfer wie in der angenommenen Antwort haben. –