java expression régulière correspondant chemin d'accès au fichier
J'ai essayé de créer une expression régulière correspondant chemin d'accès au fichier en java comme
C:\abc\def\ghi\abc.txt
J'ai essayé ce ([a-zA-Z]:)?(\\[a-zA-Z0-9_-]+)+\\?
, comme le code suivant
import java.util.regex.Pattern;
public class RETester {
public static void main(String arhs[]){
String regularExpression = "([a-zA-Z]:)?(\\[a-zA-Z0-9_-]+)+\\?";
String path = "D:\\directoryname\\testing\\abc.txt";
Pattern pattern = Pattern.compile(regularExpression);
boolean isMatched = Pattern.matches(regularExpression,path);
System.out.println(path);
System.out.println(pattern.pattern());
System.out.println(isMatched);
}
}
Cependant, il est toujours à me donner , faux comme le résultat . Svp aider moi .
Grâce
OriginalL'auteur Jijoy | 2010-12-20
Vous devez vous connecter pour publier un commentaire.
Java est à l'aide de la barre oblique inverse-de s'échapper en trop, vous savez, alors vous devez vous échapper de vos barres obliques inverses deux fois, une fois pour le Java string, et une fois pour les regexp.
Votre expression rationnelle correspondant à un littéral '[-zA-Z0-9_-' string, et un littéral '?' à la fin. J'ai également ajouté une période pour permettre 'abc.txt'..
Cela dit, envisager d'utiliser un autre mécanisme pour déterminer les noms de fichier valide, car il existe différents régimes (c'est à dire unix). java.util.Le fichier sera probablement lancer une exception si le chemin n'est pas valide, qui peut être une bonne alternative, même si je n'aime pas utiliser les exceptions pour le contrôle de flux de...
Malheureusement non,
java.util.File
acceptera charabia des chemins dans son constructeur sans lancer une exception.merci, n'en était pas sûr, trop mal.
Aimerais avoir une petite note sur la downvote trop..
vous êtes apparemment correct, mais votre hypothèse que test.txt est un fichier qui est faux. Rien ne vous empêche de vous créer un répertoire appelé "test.txt" et un fichier dans ce répertoire appelé "hhh".
OriginalL'auteur falstro
Utiliser cette regex:
J'ai ajouté deux modifications: vous avez oublié d'ajouter
.
pour faire correspondre le nom du fichierabc.txt
et barre oblique inverse s'échapper (\\
) est également nécessaire.OriginalL'auteur darioo
Elle ne correspond pas, parce que votre regex match seulement pour les chemins, de ne pas les fichiers. -- Plus correct: il n'accepte pas la dot votre nom de fichier.
Et en plus, il y a du s'échapper problème mentiond par les chevreuils.
OriginalL'auteur Ralph
Viens de le dire, on doit remplacer le
.
dansavec
\\.
.
est destiné à n'importe quel caractère dans une expression régulière (style Java), tandis que l'\.
est spécifiquement destiné . caractère, et nous avons besoin de sortir la barre oblique inverse.
à l'intérieur d'un groupe de caractères ne signifie jamais "n'importe quel caractère", les seuls caractères spéciaux dans les groupes de caractères sont]
(fin du groupe),-
(gamme, uniquement lors de la spéciale utilisée entre les deux personnages, et non pas au début ou à la fin ou entre deux chaînes de montagnes,a-b-c
corresponda
,b
,c
, et-
), et^
(négation de match, seulement s'il est utilisé comme premier caractère)OriginalL'auteur finbrein
Depuis le chemin d'accès contient des dossiers et le nom du dossier peut contenir n'importe quel caractère autre que
Nous pouvons utiliser le dessous des regex pour correspondre à un chemin d'accès au répertoire [il utilise tous les symboles d'un nom de dossier peuvent se permettre]
OriginalL'auteur Cjo
Il y a deux raisons pour lesquelles il est de vous donner de faux. La première est que vous avez besoin
\\\\
au lieu de\\
parce que vous avez besoin pour échapper à ces personnages. Et la deuxième est que vous êtes absent un caractère de point, vous pouvez l'insérer avanta-z
comme([a-zA-Z]:)?(\\\\[.a-zA-Z0-9_-]+)+\\\\?
OriginalL'auteur Artur
Ici est correcte regex pour le système de fichiers windows:
Expression Régulière:
comme Java chaîne
OriginalL'auteur To Kra
Si elle doit correspondre uniquement le chemin d'accès des fichiers situés sur la même machine où votre application est en cours d'exécution, vous pouvez utiliser:
Donc, si vous exécutez votre application sur le windows le code ci-dessus va attraper invalide chemins d'accès windows et si vous êtes en cours d'exécution sur unix, il va attraper des invalides chemins unix, etc.
OriginalL'auteur iammyr