For consistency, our version of String.count should also accept regexes as
patterns, as supported in String.replace and others.


*José Valimhttps://dashbit.co/ <https://dashbit.co/>*


On Thu, Apr 17, 2025 at 2:28 PM Roman Smirnov <pom...@gmail.com> wrote:

> Interesting. I didn't know about :binary.matches/2
>
> I usually use that way to solve the original task:
> Regex.scan(pattern, string) |> Enum.count
>
> But I guess would be nice to have a helper for it. Maybe not `count`
> (could be ambiguous, b/c it's a synonym of length), maybe substr_count
>
> четверг, 17 апреля 2025 г. в 14:48:11 UTC+3, steffen...@dashbit.co:
>
>> Hello everyone,
>>
>> I recently came across the need to count all the occurrences of a pattern
>> inside a String. First, I used `String.split(string, pattern)` and then
>> counted the number of parts (-1). Then it was suggested to me to use
>> `:binary.matches` instead and simply count the number of entries. This is
>> quite straightforward, but you need to know about `:binary.matches`, so I
>> wondered if the Elixir `String` module should include something like
>> `String.count/2` instead:
>>
>> @doc ~S"""
>> Counts the number of occurrences of a pattern in a string.
>>
>> ## Examples
>>
>> iex> String.count("hello world", "o")
>> 2
>>
>> iex> String.count("hello world", "l")
>> 3
>>
>> iex> String.count("hello world", "x")
>> 0
>>
>> """
>> @spec count(t, pattern) :: non_neg_integer
>> @doc since: "1.19.0"
>> def count(string, pattern) do
>> Enum.count(:binary.matches(string, pattern))
>> end
>>
>> As you can see, the implementation is quite straightforward, so I'm not
>> sure if it's worth to be included. Let me know what you think!
>>
>> Happy to send a PR.
>>
> --
> You received this message because you are subscribed to the Google Groups
> "elixir-lang-core" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to elixir-lang-core+unsubscr...@googlegroups.com.
> To view this discussion visit
> https://groups.google.com/d/msgid/elixir-lang-core/0e7f4fbb-a786-4d1d-a3f9-d76712e4eae4n%40googlegroups.com
> <https://groups.google.com/d/msgid/elixir-lang-core/0e7f4fbb-a786-4d1d-a3f9-d76712e4eae4n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elixir-lang-core+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4Jmzjkz%2Bu_fxRrCxngrwZ4ELczMud23wWpjjMZ1FsdNTA%40mail.gmail.com.

Reply via email to