2009-10-10 7 views
0

Je suis si mal à regexp, mais je suis en train de se some/path/image.jpg de http://somepage.com/some/...etc et d'essayer cette méthode:Comment puis-je faire correspondre la partie domaine d'une URL en PHP?

function removeDomain($string) { 

    return preg_replace("/http:\/\/.*\//", "", $string); 

} 

Il ne fonctionne pas - pour autant que je peux dire qu'il est juste un retour chaîne vide. Comment écrire cette expression rationnelle?

Répondre

1

d'utilisation parse_url comme d'autres personnes l'ont déjà dit.

Mais pour répondre à votre question sur pourquoi votre regex ne fonctionne pas, il va correspondre à URL complète car .* correspond à quoi que ce soit, et en effet il est. Il correspond à l'URL entier, et en le remplaçant par une chaîne vide, d'où vos résultats. Effectuez les opérations suivantes au lieu qui ne correspondre à un nom d'hôte (quoi que ce soit au premier «/»).

function removeDomain($string) { 
    return preg_replace("@^https?://[^/]+/@", "", $string); 
} 
1

Alors que SilentGhost a raison, la raison pour laquelle votre regex échoue parce que * est gourmand, et mangera tout , tant qu'il y a un / après.

Si vous mettez une marque ? après votre .*, il ne correspond que la première /

function removeDomain($string) { 

    return preg_replace("/http:\/\/.*?\//", "", $string); 

} 
Questions connexes