Эликсир: Как считать URL в строке - PullRequest
0 голосов
/ 26 марта 2020

Предположим, у меня есть строка:

content = "Please visit https://www.google.com...\nOr visit http://my.website.io\nhttp://myfriends.website.com\nOr https://www.myneigborsite.com, http://visit.me.com"

В строке 5 URL-адресов.

Как рассчитать URL-адреса с использованием синтаксиса?

Я пытался используя Regex.scan/2 |> Enum.count/1 или String.split/2 |> Enum.count/1 <- с регулярным выражением, но я всегда получаю неправильный вывод. </p>

Я также пробовал все регулярные выражения http / https, которые я нашел в inte rnet, но все же не могу получите правильный вывод.

Вот тот, который я пробовал.

iex> content
...> |> String.split(~r/^(https?):\/\/[^\s$.?#].[^\s]*$/)
...> |> Enum.count()
...> |> Kernel.-(1)
-1

Еще один с тем же регулярным выражением ..

iex> Regex.scan(~r/^(https?):\/\/[^\s$.?#].[^\s]*$/, content) |> Enum.count()
0

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

iex> Regex.match?(~r/^(https?):\/\/[^\s$.?#].[^\s]*$/, "https://www.google.com")
true
iex(48)> Regex.match?(~r/^(https?):\/\/[^\s$.?#].[^\s]*$/, "http://my.website.io")
true

Это соответствует. Я не могу понять, в чем проблема. Пожалуйста, помогите мне.

1 Ответ

2 голосов
/ 26 марта 2020

Вам нужно только считать URL, что означает, что вам не нужно слишком сложное регулярное выражение.

~r|https?://[\w.-]+|
|> Regex.scan(content)
|> Enum.count()
#⇒ 5

Ваши попытки не увенчались успехом, потому что вы поставили $, EOL-совпадение в выражениях, которое, очевидно, не совпадает, когда URL не заканчивается строкой.

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