2010-04-26 4 views
3

J'essayais de comprendre comment cette regex dynamitée pendant deux heures !!! Il est minuit, je dois comprendre ça et aller au lit !!!regex pour les chaînes correspondantes qui ont des caractères de nom de fichier illégaux

String str = new String("filename\\"); 
if(str.matches(".*[?/<>|*:\"{\\}].*")) { 
    System.out.println("match"); 
}else { 
    System.out.println("no match"); 
} 

".*[?/<>|*:\"{\\}].*" est mon expression regex. Il attrape tout correctement sauf le backslash !!! J'ai besoin de savoir comment faire pour attraper le backslash correctement s'il vous plaît aider!

Pour info, les caractères illégaux que j'essaie d'attraper sont ? \/<> | *: " Je l'ai exception à travailler pour la barre oblique inverse

Répondre

8

Le problème est que \\ échappe une barre oblique inverse dans une chaîne Java et vous devez échapper dans le regex Cela signifie en utilisant quatre antislashs:.

if ("ab\\d".matches("[abd\\\\]*") { 
    // match 
} 

Parce que deux des barres obliques inverses sont String Java échappe à la regex est vraiment:

[abc\\]* 

et \\ est nécessaire dans le regex pour échapper à la b ackslash.

+0

MERCI !!!!!!! Pour la raison quand j'essaie d'accepter votre réponse comme la bonne réponse, il est dit que je dois attendre 9 minutes: \ Merci encore une fois maintenant je peux aller au lit heureux! – cchampion

3

Je sais que c'est une question assez vieux à ce moment, mais je l'ai trouvé tout en travaillant sur la même question et je me suis dit futurs lecteurs pourraient trouver ce utile:

En plus de la capture des caractères non valides dans un nom de fichier il y a quelques autres choses à prendre en compte. Les noms de fichiers ne peuvent pas commencer ou se terminer par un espace, ils ne peuvent pas se terminer par un caractère ., et ils ne peuvent pas être une chaîne vide. Cette expression régulière peut être un peu plus approfondie pour faire correspondre un mauvais nom de fichier:

^(\s+.*|.*[\\/:\"?*|<>].*|.*\s+||.*\.)$ 
Questions connexes