Как игнорировать все после доменной зоны, кроме символа "/" - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть регулярное выражение для совпадающего домена с именем пользователя:

/(?:https:\/\/)?(?:http:\/\/)?(?:www\.)?(?:facebook)\.com\/(\w+(?:\.\w+)*)$/

URL-адреса примера соответствия этому регулярному выражению:

facebook.com/username
www.facebook.com/username
http://facebook.com/username
http://www.facebook.com/username
https://facebook.com/username
https://www.facebook.com/username

Как изменить это регулярное выражение для соответствия только URL с доменной зоной и не требуетсясимвол /:

facebook.com
facebook.com/
.....................
https://facebook.com/
https://www.facebook.com

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Поскольку это тег Perl, ответ Perl заключается в использовании модуля URI-разбора, например URI или Mojo :: URL .

use strict;
use warnings;
use Mojo::URL;
while (my $input = <<>>) { # or whatever way the input comes in
  chomp $input;
  my $url = Mojo::URL->new($input);
  next unless !defined $url->scheme or $url->scheme eq 'http' or $url->scheme eq 'https';
  next unless defined $url->host and ($url->host eq 'facebook.com' or $url->host eq 'www.facebook.com');
  next if length $url->path and $url->path ne '/';
  print "$input\n";
}
0 голосов
/ 23 ноября 2018

Вы хотите сопоставлять только строки, содержащие только домен, тогда вы можете использовать что-то вроде этого:

^(?:https?:\/\/)?(?:www\.)?facebook\.com\/?$

Это будет совпадать независимо от того, имеет ли он протокол (http(s):\/\/) и независимо от того,он содержит www..

Посмотреть вживую

Разбить регулярное выражение, ^(?:https?:\/\/)?(?:www\.)?facebook\.com\/?$

  • ^ началострока
  • (?:https?:\/\/)? группа без захвата, которая будет соответствовать протоколу https?:\/\/, ноль или один раз ? (необязательно)
  • (?:www\.)? группа без захвата, которая будет соответствоватьwww., ноль или один раз ? (необязательно)
  • facebook\.com будет соответствовать домену
  • \/? будет соответствовать необязательному ? прямому слешу \/
  • $ конец строки (выделение добавлено) - это то, что позволяет этому работать с вашими требованиями, поскольку это не позволит чему-либо совпадать после опционального пересылкикосая черта в предыдущей пуле.
...