Supposons que j'ai une chaîne:
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"
Il y a 5 URL dans la chaîne.
Comment compter les URL à l'aide de la syntaxe?
J'ai essayé d'utiliser Regex.scan/2 |> Enum.count/1
, ou String.split/2 |> Enum.count/1
<- avec regex mais j'ai toujours une mauvaise sortie.
J'ai également essayé toutes les expressions régulières http / https que j'ai trouvées sur Internet, mais je ne parviens toujours pas à obtenir la sortie correcte.
En voici un que j'ai essayé.
iex> content
...> |> String.split(~r/^(https?):\/\/[^\s$.?#].[^\s]*$/)
...> |> Enum.count()
...> |> Kernel.-(1)
-1
Un autre avec le même regex.
iex> Regex.scan(~r/^(https?):\/\/[^\s$.?#].[^\s]*$/, content) |> Enum.count()
0
mais quand je vérifie si le regex correspond à certaines des 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
Cela correspond. Je n'arrive pas à comprendre quel est le problème. Aidez-moi, s'il vous plaît.
Vous ne devez compter que les URL, ce qui signifie que vous n'avez pas besoin d'une expression régulière trop compliquée.
~r|https?://[\w.-]+|
|> Regex.scan(content)
|> Enum.count()
#⇒ 5
Vos tentatives ont échoué car vous avez mis $
le matcher EOL dans les expressions, ce qui ne correspond évidemment pas lorsque l'URL ne termine pas la chaîne.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras