2017-10-05 9 views
0

Goal

Remplacer les hôtes et les chemins (emplacements), mais gardez les noms de fichiers (ils sont inchangés).Regex - get protocole URL, hôte, le chemin, mais pas filename - PCRE

URL sans sous-domaine - ne fonctionne pas

Cela fonctionne pour l'hôte (domaines) qui sont présentent au moins un sous-domaine (par exemple « www.somedomain.com »), mais ne parvient pas à obtenir le chemin avec juste le domaine + TLD (par exemple 'somedomain.com')

(http[s]?:\/\/([^:\/\s]+)(\/\w+)*\/)+

Dans le code HTML suivant

junk before tag <img src="https://somedomain.com/wp-content/uploads/2017/10/someimage.jpg" alt="" />Random text after 

Un moteur PCRE ne capturera:

https://somedomain.com/ 

URL avec subdomain - Travaux

Dans l'extrait HTML suivant (domaine a un sous-domaine)

junk before tag <img src="https://www.somedomain.com/wp-content/uploads/2017/10/someimage.jpg" alt="" />Random text after 

Un moteur PCRE capture l'URL complète (sauf pour le fichier):

https://www.somedomain.com/wp-content/uploads/2017/10/ 

Question

Comment puis-je régler la regex pour capturer le protocole complet, domaine et le chemin (mais pas le nom de fichier) pour img src="" URL qui ont des sous-domaines ainsi que les sans sous-domaines?

+0

Ainsi, dans le 2ème exemple, vous voulez revenir 'www.somedomain.com'? Je ne suis pas vraiment clair sur ce qu'est exactement la sortie désirée. – CAustin

+0

Dans le 1er exemple, je veux 'https: // somedomain/wp-content/uploads/2017/10 /', mais j'obtiens seulement 'https: // somedomain /'. Le 2ème exemple fonctionne comme prévu. – Baker

Répondre

1
https?:\/\/(?:[^\/ ]*\/)* 

Démo here.

Explication

http  //Should start with http 
s?  // s is optional 
:\/\/  // should follow up with :// 
(?:  //START Non capturing group 
[^\/ ]* //Any character but a/or a space 
\/  //Ends with/
)   //END Non capturing group 
*   //Repeat non-capturing group 
+0

Cela a fait l'affaire. Je vous remercie. – Baker