2011-09-03 4 views
0

J'ai ce modèle ^(?:http://)?(?:www.)?(.*?)/?(.*?)$ mais ce n'est pas encore parfait. Disons que nous avons ces urls pour effectuer le test:Motif Regex pour formater l'URL

example.com 
example.com/ 
www.example.com/ 
http://example.com/ 
example.com/param 
http://example.com/params/ 

La sortie finale devrait être example.com/ s'il n'y a pas de paramètres et example.com/params/ si des paramètres. Mon problème est qu'il ne correspond qu'à un deuxième groupe. Il ne semble pas que /? fonctionne sinon il s'arrêterait sur le caractère de barre oblique. Est-il possible de réaliser ce que je veux en utilisant un seul motif?

Répondre

2

Donc vous voulez que le nom d'hôte en $ 1? Votre regex est ambiguë, il y a plusieurs façons de la faire correspondre; le moteur regex préférera la correspondance la plus longue et la plus à gauche possible. Si vous ne voulez pas de barres obliques dans la première partie, dites-le. Explicitement. (?:http://)?(?:www\.)?([^/]*)?/?(.*)?$

+0

Oui, c'est ce que je cherche. Merci! –

0

Un que je l'ai utilisé est:

((?:(?:https?://)?[\w\d:#@%/;$()~_?\+\-=&]+|www|ftp)\.[\w\d:#@%/;$()~_?\+\-=&\.]+) 

Le problème des URL est qu'il ya tellement de façons on peut écrire, ce qui explique pourquoi le code ci-dessus a l'air si encombré. Cela correspondra à tous vos exemples ci-dessus, mais il sera également correspondre à des choses comme:

alkasi.jaias 

Espérons que cela vous obtenir dirigé à l'endroit où vous avez besoin ou envie d'aller, et peut-être que quelqu'un pourrait être en mesure de venir derrière moi et nettoyez-en quelques-uns (c'est tôt le matin, je me prépare pour le travail, et suis épuisé.: P)