2010-08-10 10 views
1

J'utilise cette regex (((ht|f)tp(s?))\://)?(www.|[a-zA-Z].)[a-zA-Z0-9\-\.]+\.(com|edu|gov|mil|net|org|biz|info|name|museum|us|ca|uk)(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\;\?\'\\\+&%\$#\=~_\-]+))* pour rechercher des URL, le seul problème, c'est de trouver "vous ca" est une url, comment puis-je le changer de sorte qu'il doit y avoir une période avant la fin (enurl regex questions

+0

Je peux voir que vous avez échappé. dans votre regex, essayez de leur échapper et vérifiez si cela fonctionne. –

+0

Si vous nous dites votre langue cible, il peut y avoir une bibliothèque que nous pouvons vous suggérer au lieu d'essayer d'écrire un analyseur complexe dans regex –

+1

Pouvons-nous ** s'il vous plaît ** arrêter d'essayer de "valider" les URL en vérifiant leur TLD contre valeurs connues? Voulez-vous vraiment mettre à jour votre expression chaque fois que l'ICANN approuve un nouveau TLD? Pensez-vous vraiment que ce soit même tous les TLD qui existent en ce moment? (indice: non.) – bobince

Répondre

1

Vous avez oublié d'échapper aux périodes du bloc (www. | [a-zA-Z].).

+0

Comment cela a-t-il quelque chose à voir avec le bloc '\ .' avant le bloc' (com | edu ... '? –

+0

Je ne sais pas grand-chose sur les regex, comment pourrais-je leur échapper? –

+0

Ajouter un \ avant les périodes dans – zigdon

3

L'analyse d'uris avec des regexes est un problème difficile. Utilisez une bibliothèque comme Regexp::Common::URI ou préparez-vous à passer beaucoup de temps à étudier un groupe de RFC. Analyser les URI n'est pas trivial et il y a beaucoup d'erreurs subtiles à faire.

0

Vous pouvez utiliser un quantificateur pour le caractère point, donc '\. {1}' nécessiterait exactement une période avant tout ce qui suit.

Ce n'est pas quelque chose qui est une partie nécessaire du débogage de ce problème, mais il peut être utile de le connaître. Il est juste plus explicite, et '{1}' est plus grand qu'un point, donc il sert aussi de séparateur dans les regex longs et moche où, pendant le débogage, vous pourriez accidentellement lancer un "+" ou "*" à côté du point .

+0

En quoi est-ce différent de '\.'? – zigdon

+0

+1 pour avoir découvert non pas un, mais deux utilisations de '{1}'.: DI ne peut toujours pas me voir l'utiliser, cependant, le fouillis qu'il ajoute à la regex annule tout avantage qu'il apporte, à mon avis. –

0

John Gruber de l'expression rationnelle est le meilleur à ce jour dans mon expérience à trouver les URL. Voir son article sur son blog: An Improved Liberal, Accurate Regex Pattern for Matching URLs. Il est utilisé dans beaucoup de code de production. Il existe deux versions: l'une correspond à une URL tandis qu'une autre correspond uniquement aux URL http/https.