Попробуйте создать регулярное выражение для извлечения адреса веб-сайта из строки в Java, но не можете сделать это правильно - PullRequest
0 голосов
/ 22 февраля 2012

Я пытаюсь извлечь адрес веб-сайта из URL, используя следующий код

public String getWebSiteAddress(String text)
    {

        Pattern p = Pattern.compile("\\b([a-z0-9]+(-[a-z0-9]+)*\\.)+[a-z]{2,3}\\b");

        //Pattern p = Pattern.compile("^http\\:/[a-zA-Z0-9\\-\\.]+\\.[a-zA-Z]{2,3}(/\\S*)?$");
        System.out.println("\\b([a-z0-9]+(-[a-z0-9]+)*\\.)+[a-z]{2,3}\\b");
        Matcher m = p.matcher(text);
        if(m.matches())
        {
            System.out.println("got it");
            return  m.group(0) ;
        }
        else
        {
            System.out.println("ddnt get");
            return "";
        }


    }

Оказывается, этот код работает безупречно внутри regexBuddy, но в JAVA кто-нибудь может мне помочь, в чем проблема с моим регулярным выражением или долженЯ что-то изменить в своем регулярном выражении в соответствии с Java?

веб-сайт, который я хочу извлечь, что-то вроде:

http://intelweb.xyz.kycv.kk.jj/~u0082/jbvelweb2/

1 Ответ

1 голос
/ 22 февраля 2012

Вам может понадобиться использовать метод find () для matcher.

public String getWebSiteAddress(String text)
{
    Pattern p = Pattern.compile("\\b([a-z0-9]+(-[a-z0-9]+)*\\.)+[a-z]{2,3}\\b");
    Matcher m = p.matcher(text);

    if (m.find()) {
        System.out.println("got it");
        return  m.group(1) ;
    }
    else
    {
        System.out.println("didnt get");
        return "";
    }
}

Очевидно, что совпадения работают, только если вся строка соответствует регулярному выражению.

...