Java - нужна помощь по шаблону Regex для сопоставления http и https - PullRequest
1 голос
/ 10 марта 2012

Я борюсь за то, чтобы мой шаблон регулярных выражений соответствовал. Вот мои требования ...

Сравните следующий домен ex (google.com) с http и https.

У меня есть список массивов различных URL-адресов ....

http://stackoverflow.com/questions/ask
https://ask.com/search
http://google.com/images
https://google.com/images

Это мой шаблон:

final Pattern p = Pattern.compile( "(http:(?!.*google.com).*)" );

Однако в настоящее время он возвращает значение true для всех моих URL.

Опять же, я хочу, чтобы он возвращал true, только если http://www.google.com или https://www.google.com соответствует моему текущему URL.

Ответы [ 6 ]

1 голос
/ 10 марта 2012

Как насчет java.net.URI или классов URL ...

try {
    URI url = new URI("https://www.google.com/foo?test=horse");
    System.out.println(url.getScheme()); // https
    System.out.println(url.getHost()); // www.google.com
    System.out.println(url.getPath()); // /foo
    System.out.println(url.getQuery()); // test=horse
} catch (URISyntaxException e) {
    e.printStackTrace();
}

Изменить: я использовал URI, потому что я помню, что где-то URL имел побочные эффекты. Только что проверил, метод hashCode () выполняет поиск DNS. Поэтому придерживайтесь URI, если вы просто хотите повторно использовать функцию парсинга URL ... См. Этот вопрос

1 голос
/ 10 марта 2012

Используйте это:

Pattern.compile("^(https?://(?![^.]*\\.google\\.com)[^/]*)");
1 голос
/ 10 марта 2012

Как насчет .contains("//google.com")? Или если "google.com" находится на седьмой или восьмой позиции?

0 голосов
/ 10 марта 2012
    String[] urls = new String[] {
        "http://stackoverflow.com/questions/ask",
        "https://ask.com/search",
        "http://google.com/images",
        "https://google.com/images",
        "http://www.google.com"
    };

    final Pattern p = Pattern.compile( "https?://.*?google\\.com.*?" );

    for (String url : urls) {
        Matcher m = p.matcher(url);
        System.out.println(m.matches());
    }

Вывод:

   false
   false
   true
   true
   true
0 голосов
/ 10 марта 2012

Я хочу, чтобы он возвращал true, только если http://www.google.com или https://www.google.com соответствует моему текущему URL.

Pattern.compile("(?i)^https?://www\\.google\\.com\\z");
0 голосов
/ 10 марта 2012

final Pattern p = Pattern.compile( "(https?:(?!.*google.com).*)" );

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...