je besoin d'une expression régulière qui détecte si une chaîne donnée est une URL pour un [potentiel] fichier-à-dire
/file.pdf
http://www.whatever.com/file.docx
. ./fichier.longfileextension
Merci les garsRegex pour détecter urls que lorsque le dernier « segment » contient une période
Répondre
Cette expression fera l'affaire.
^.*/(?<filename>[^/]+?\.[^/]+)$
^ Anchor to the begining of the string .* Any character zero or more times / Slash (?<filename> Named group 'filename' [^/]+? Not a slash at least once and captured lazily \. One file extension separator (dot) [^/]+ Not a slash at leats once ) End of named group $ Anchor to the end of the string
Vous pouvez inspecter la fin pour voir si elle ressemble à une extension de fichier, mais les URL ne correspondent pas réellement aux fichiers; Et si l'URL est réécrite?
Si vous voulez déterminer ce qu'est une URL donnée résolu, vous pourriez émettre une demande HEAD
et inspecter les en-têtes content-type
et content-disposition
pour voir si le contenu est d'un type qui implique un fichier sous-jacent, mais même ce n'est pas l'épreuve des balles, puisque les images, PDF, etc. pourraient tous être générés dynamiquement.
Vous ne pouvez pas.
E.g. http://example.com/files/readme
peut être un fichier texte ou un dossier (les OS de style * nix n'incluraient pas d'extension .txt
).
Même s'il existe une extension de fichier, il peut n'y avoir aucun fichier, le code côté serveur traitant l'URL pour créer du contenu (par exemple un ASP.NET HttpHandler).
Pourquoi essayez-vous de faire cela? Si vous souhaitez détecter si l'URL renvoie un fichier, vous pouvez deviner avec l'extension (en gardant à l'esprit que les applications sont libres d'inventer la sienne), mais le seul moyen consiste à effectuer une requête HTTP HEAD et vérifier le type de contenu retourné (mais encore une fois vous avez le même problème avec ce qui est un type MIME de fichier valide).
i besoin de détecter si une URL saisie par un utilisateur est une tentative de créer un lien vers un fichier sur le système ou non. –
@Adam: étendu. – Richard
- 1. Regex pour détecter Javascript Dans une chaîne
- 2. Détecter si le segment de ligne croise le carré
- 3. regex: Correspondance des parties d'une chaîne lorsque la chaîne contient une partie d'un modèle regex
- 4. Utiliser le contrôleur de segment pour "pousser" plutôt que UINavigationController
- 5. regex pour le caractère apparaissant au plus une fois
- 6. J'ai besoin d'un regEx pour faire correspondre les URLs générales
- 7. Regex pour diviser une chaîne uniquement par le dernier caractère d'espace
- 8. La table de la base de données contient les URLs
- 9. Ressource introuvable pour le segment « propriété »
- 10. Temporisateur portable pour une période d'environ 100ms
- 11. Comment déterminer si une chaîne contient des métacaractères regex? (C#)
- 12. Calcul d'un mois en tant que période "entre" dans java
- 13. routage asp.net mvc lorsque le paramètre passé contient point
- 14. Comment faire pour que mes urls fonctionnent avec mod_rewite?
- 15. Comment initialiser une période avec des secondes
- 16. RegEx pour dire si une chaîne ne contient pas un caractère spécifique
- 17. Détecter lorsque le flash charge l'élément à distance
- 18. Comment écrire regex pour trouver un répertoire dans une URL?
- 19. Stocker le segment précédemment sélectionné d'un UISegmentedControl?
- 20. LINQ: multiple Où les appels n'utilisent que le dernier?
- 21. C# - Détecter l'heure de l'interaction du dernier utilisateur avec le système d'exploitation
- 22. Détecter lorsque l'application démissionne active dans le cacao?
- 23. Clé primaire lorsque vous stockez beaucoup de données pendant une courte période de temps
- 24. Regex pour obtenir le lien dans href. [asp.net]
- 25. Regex pour le BBCode imbriqué
- 26. récupérer le segment caché default.aspx d'une URL
- 27. Expression régulière pour détecter la répétition dans une chaîne
- 28. Regex pour remplacer le charabia
- 29. Regex pour vérifier une chaîne
- 30. Qu'est-ce que la durée de vie maximale d'un segment
Merci de ne pas lire entre les lignes :) –
J'ai lu entre les lignes au début. Mais bien qu'il ne résout pas le cas général du problème, il résoudra des cas spéciaux et vous êtes probablement après un cas particulier comme l'indique la question modifiée. –