2010-11-04 4 views
2

J'apprends/je pratique Regex. Je l'ai écrit pour tester URL ... Je veux attraper dans ces formats URL:Question sur Regex

www.site.com 
www.site.co.uk etc 
site.com 
play.site.com 

J'ai écrit ceci:

(http:\/\/)*(www)*\.*(\w{2,})(\.{1})(\w{2,3})(\.*)(\w{2,3})* 

(match de http: // 0 ou plusieurs fois, suivi de plusieurs caractères 0 fois ou plus, suivi d'un nom de domaine, suivi d'un point, suivi de quelques caractères supplémentaires (au moins 2, max 3), suivi d'une période optionnelle et de quelques caractères supplémentaires (pour co.uk etc).)

Je suis très nouveau à regex alors je ne sais pas si il y a des problèmes avec ce que j'ai fait, mais il voit ms pour bien fonctionner dans le test ici: http://regexpal.com/. N'hésitez pas à le déchirer!

La seule chose que j'ai remarquée est qu'elle correspond à .site.com que je ne veux pas. Comment puis-je faire correspondre simplement site.com et toujours autoriser http: // et www et sous-domaines?

+8

Vous voudrez peut-être consulter le? opérateur - Je ne pense pas que vous voulez vraiment faire correspondre le http: // ou www plusieurs fois. – user470379

+0

Oui. Merci. C'est très utile ... même que {0,1} n'est-ce pas? –

+1

Vos exemples ne sont pas des URL, ce sont des noms d'hôtes et les noms d'hôtes ne sont pas pratiques pour repérer du texte général, car tout mot ou séquence de mots séparés par des points est un nom d'hôte valide. Dire quelque chose avec (point) (deux ou trois lettres) à la fin est un nom d'hôte est périlleux car vous attraperez les deux faux positifs, * et * ne correspondent à aucun des TLD qui ne sont pas 2-3 lettres de long. Je ne tenterais pas de faire correspondre les noms d'hôtes dans le texte; mieux vaut exiger que les utilisateurs soient explicites et tapez le 'http: //'. – bobince

Répondre

6

Mettez le "." dans le match "www"; cela résoudra le problème d'avoir potentiellement un point correspondant dans votre URL.

1

S'il vous plaît ne pas utiliser ce code dans quelque chose de sérieux s'il vous plaît. Analyser les URI avec des regexps est faux et horrible - utilisez une bibliothèque pour le faire correctement.

+1

Je suis d'accord qu'il y a de meilleurs moyens, mais pourquoi est-ce "faux"? Autant que je sache, l'ensemble des URI valides est un langage courant. –

+0

Sûrement une bibliothèque utilise regex? Quelles sont les meilleures façons sont là? –

+0

Vous voulez dire une bibliothèque JS, n'est-ce pas? –