Now as we have more information, I have an alternative version which I prefer over @dimitarvp, because it is much more explicit about what we want.
- It says that we want an URL and verifies we get one (by parsing it) and that we are only interested in the
path, - it says that we are searching for dot, followed by at least one digit and ending with a slash as the last character of the path, but we are only interested in the actual digits (the call to
Regex.named_captures/3), - we want those digits to cleanly parse into a number.
If all succeed, we return an :ok-tuple, and simply :error otherwise.
But which version to choose is probably a matter of taste, I have not benchmarked them.
defmodule M do
def extract(url) do
with %URI{path: path} when is_binary(path) <- URI.parse(url),
%{"num" => num_str} <- Regex.named_captures(~r[\.(?<num>\d+)/$], path),
{num, ""} <- Integer.parse(num_str) do
{:ok, num}
else
_ -> :error
end
end
end
IO.inspect M.extract("https://foster.com/death-pancake.1468/")
IO.inspect M.extract("https://hkd33.net/mr-rogers101.690153/")
IO.inspect M.extract("https://space-force911.gov/sauce-master.13257777/")






















