2015-08-17 3 views
1
static String AdrPattern="http://www.([^&]+)\\.com\\.*"; 
    static Pattern WebUrlPattern = Pattern.compile (AdrPattern); 
    static Matcher WebUrlMatcher; 
       WebUrlMatcher = WebUrlPattern.matcher ("keyword"); 
       if(WebUrlMatcher.matches()) 
      String extractedPath = WebUrlMatcher.group (1); 

Учитывая приведенные выше коды, моя цель - извлечь доменное имя из URL-адреса и убрать остальные. Но проблема в том, что, прежде всего, если URL-адрес имеет более глубокий путь, он не будет игнорировать его, а во-вторых, он не работает для всех URL-адресов с расширением .com.Использование Matcher для извлечения URL-адреса домена

Например, если URL-адрес равен http://www.lego.com/en-us/technic/?domainredir=technic.lego, результат не будет lego, но lego.com/en-us/technic/?domainredir=technic.lego.

ответ

1

Использование

static String AdrPattern="http://www\\.([^&]+)\\.com.*"; 
            ^^   ^

Вы избежали последней точки, и это рассматривалось как буквальным, и matches не может совпадать со всей строкой. Кроме того, первая точка должна быть экранирована.

Кроме того, чтобы сделать регулярное выражение более строгим, вы можете заменить [^&]+ на [^/&].

UPDATE:

static String AdrPattern="http://www\\.([^/&]+)\\.com/([^/]+)/([^/]+)/([^/]+).*"; 
static Pattern WebUrlPattern = Pattern.compile (AdrPattern); 
static Matcher WebUrlMatcher = WebUrlPattern.matcher("http://www.lego.com/en-us/technic/?domainredir=technic.lego"); 
if(WebUrlMatcher.matches()) { 
    String extractedPath = WebUrlMatcher.group(1); 
    String extractedPart1 = WebUrlMatcher.group(2); 
    String extractedPart2 = WebUrlMatcher.group(3); 
    String extractedPart3 = WebUrlMatcher.group(4); 
} 

Или с \G:

static String AdrPattern="(?:http://www\\.([^/&]+)\\.com/|(?!^)\\G)/?([^/]+)"; 
static String AdrPattern="http://www\\.([^/&]+)\\.com/([^/]+)/([^/]+)/([^/]+)"; 
static Pattern WebUrlPattern = Pattern.compile (AdrPattern); 
static Matcher WebUrlMatcher = WebUrlPattern.matcher("http://www.lego.com/en-us/technic/?domainredir=technic.lego"); 
int cnt = 0; 
while(WebUrlMatcher.find()) { 
    if (cnt == 0) { 
     String extractedPath = WebUrlMatcher.group(1); 
     String extractedPart = WebUrlMatcher.group(2); 
     cnt = cnt + 1; 
    } 
    else { 
     String extractedPart = WebUrlMatcher.group(2); 
    } 
} 
+0

, что является правильным. есть еще один вопрос, который вы можете помочь. Если я хочу сделать каждый более глубокий путь для извлечения, я должен переименовывать 'matcher.group (i)'? – lonesome

+0

Не могли бы вы показать пример ввода? –

+0

Рассматривая пример вопроса, 'http: //www.lego.com/en-us/technic/? Domainredir = technic.lego' Я хочу иметь доступ к' technic' или даже '? Domainredir = technic.lego ' – lonesome