Elixir:如何计算字符串中的 url
Elixir: How to count urls in a string
假设我有一个字符串:
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
<- 正则表达式,但我总是得到错误的输出。
我也尝试了在互联网上找到的每个 http/https 正则表达式,但仍然无法获得正确的输出。
这是我试过的一个。
iex> content
...> |> String.split(~r/^(https?):\/\/[^\s$.?#].[^\s]*$/)
...> |> Enum.count()
...> |> Kernel.-(1)
-1
另一个具有相同正则表达式的..
iex> Regex.scan(~r/^(https?):\/\/[^\s$.?#].[^\s]*$/, content) |> Enum.count()
0
但是当我检查正则表达式是否匹配某些网址时
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
确实匹配。
我不知道出了什么问题。请帮助我。
您只需要 count 个 url,这意味着您不需要过于复杂的正则表达式。
~r|https?://[\w.-]+|
|> Regex.scan(content)
|> Enum.count()
#⇒ 5
你的尝试失败了,因为你把 $
,EOL 匹配器放在表达式中,当 URL 没有终止字符串时,它显然不匹配。
假设我有一个字符串:
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
<- 正则表达式,但我总是得到错误的输出。
我也尝试了在互联网上找到的每个 http/https 正则表达式,但仍然无法获得正确的输出。
这是我试过的一个。
iex> content
...> |> String.split(~r/^(https?):\/\/[^\s$.?#].[^\s]*$/)
...> |> Enum.count()
...> |> Kernel.-(1)
-1
另一个具有相同正则表达式的..
iex> Regex.scan(~r/^(https?):\/\/[^\s$.?#].[^\s]*$/, content) |> Enum.count()
0
但是当我检查正则表达式是否匹配某些网址时
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
确实匹配。 我不知道出了什么问题。请帮助我。
您只需要 count 个 url,这意味着您不需要过于复杂的正则表达式。
~r|https?://[\w.-]+|
|> Regex.scan(content)
|> Enum.count()
#⇒ 5
你的尝试失败了,因为你把 $
,EOL 匹配器放在表达式中,当 URL 没有终止字符串时,它显然不匹配。