2011-02-25 4 views
0

J'essaie de trouver une expression régulière qui peut trouver la chaîne "C: \\".Expressions régulières pour "C: \"

Mon code est:

String test = "C:\\"; 
String regex = "[a-z]*[A-Z]*[:]*\\"; 
if(test.matches(regex)) 
    System.out.println("Success!"); 
else 
    System.out.println("Failure!"); 

Je reçois PatternSyntaxException. J'ai essayé avec beaucoup d'expressions régulières et le résultat est le même.

Comment puis-je le résoudre?

Répondre

2

La réponse simple (mais probablement inutile) est `". * ".

Dans ce cas, vous voulez apparemment quelque chose de plus proche de: "[a-zA-Z]:\\\\". Cela nécessite exactement une lettre, puis un deux-points, puis un back-slash. En supposant que votre chaîne est supposée représenter la racine d'un disque sous Windows, elle devrait être beaucoup plus proche que ce que vous aviez en tout cas.

0

La séquence \\ a une signification particulière dans la plupart des langues. C'est pourquoi c'est un mauvais choix en tant que séparateur de chemin. Le problème que vous avez ici est qu'il a une signification particulière en Java et dans les expressions régulières. Cela signifie que \\\\ est transformé en \\ en Java et \ dans l'expression régulière.

BTW Je pense que vous avez juste besoin "[a-Za-z]: \\\\"

OMG il a une signification particulière sur le SO ainsi: P

0

Vous devez échapper, une fois pour Java échappement d'une chaîne et une fois pour échapper regex:

String test = "C:\\"; 
String regex = "[a-zA-Z]:\\\\"; 
if ...
0

Si vous essayez de trouver C:\ explicitement, vous pouvez simplement utiliser String regex ="C:\\"; Pas très flexible, mais correspond exactement à. Cela veut dire: "Correspond à un seul caractère dans la plage entre" A "et" Z "" puis "Correspond au caractère": "" puis "Correspond au caractère \" ". Si vous devez inclure des lettres de début minuscules, utilisez String regex = "[a-zA-Z]:\\\\"; qui correspond à un seul caractère entre «a» et «z» ou entre «A» et «Z».

0

Pourquoi ne pas simplement utiliser String.contains("C:\\")?