2010-06-08 8 views

Répondre

8

Comme ceci:

String baseUrl; 
Pattern p = Pattern.compile("^(([a-zA-Z]+://)?[a-zA-Z0-9.-]+\\.[a-zA-Z]+(:\d+)?/"); 
Matcher m = p.matcher(str); 
if (m.matches()) 
    baseUrl = m.group(1); 

Cependant, vous devez utiliser le URI class au lieu, comme ceci:

URI uri = new URI(str); 
+0

Merci pour votre réponse rapide mais il donne https: // www.abc.com sadfl peut-il est possible qu'il donne seulement un premier https://www.abc.com – Sunil

+0

Merci beaucoup monsieur Cela fonctionne – Sunil

+0

+1 pour la classe URI. – Aistina

1

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

Cela permettra de saisir ce qui commence par http et $ 1 contiendra tout du début à la première/après le //

+0

Merci pour votre responce rapide – Sunil

1

À l'exception des scripts d'écriture-et-jeter-là, vous devriez toujours refrain de l'analyse syntaxique syntaxes complexes (adresses e-mail, URL, pages html, etc etc) en utilisant des regex. Croyez-moi, vous sera mordu par la suite.

+0

Merci pour votre commentaire – Sunil

0

Je suis assez sûr qu'il ya une classe Java qui permettra des manipulations de chemin, mais si elle doit être une expression régulière,

https?://[^/]+ 

fonctionnerait. (s? inclus pour traiter aussi https:)

+0

Merci pour votre réponse monsieur – Sunil

0

On dirait que la solution la plus simple à vos deux exemples spécifiques serait le modèle:

[^/]_//[^/]+ 

à savoir: non-slash (0 fois ou plus), deux barres obliques, non -slash (0 ou plusieurs fois). Vous pouvez être plus strict que cela si vous le souhaitez, comme le font les deux réponses existantes de différentes façons - on rejettera par exemple. Les URL commençant par ftp:, l'autre rejettera les domaines avec des traits de soulignement (mais acceptera les URL sans protocol://, ce qui sera encore plus large que le mien à cet égard). Cette variété de réponses (toutes correctes par rapport à vos petites spécifications ;-) devrait vous suggérer que vos spécifications sont trop vagues et devraient être resserrées.

+0

Merci pour votre réponse rapide monsieur – Sunil

0

Voici une expression rationnelle qui devrait satisfaire le problème tel que donné. Je suppose que vous demandez cela en partie pour acquérir plus de connaissances sur les regex.Toutefois, si vous essayez de tirer l'hôte d'une URL, il est sans doute beaucoup plus correct d'utiliser des méthodes plus d'analyse robustes de Java:

String urlStr = "https://www.abc.com/stuff"; 
URL url = new URL(urlStr); 
String host = url.getHost(); 
String protocol = url.getProtocol(); 
URL baseUrl = new URL (protocol, host); 

Cela vaut mieux, car il devrait prendre plus de cas si votre URL d'entrée n'est pas aussi strict que décrit ci-dessus.

+0

Merci pour votre réponse rapide monsieur – Sunil

2

une doublure sans regexp:

String baseUrl = url.substring(0, url.indexOf('/', url.indexOf("//")+2)); 
+0

:) Merci pour votre réponse Mais je veux utiliser regex – Sunil