belgoros
Regex question for hyphen match
I’m not a pro in using Regex and can’t figure out why the following behaviour happens, especially if we take into account the difference of matching in Javascript, Java, and Ruby (that’s why I’m a kind of stuck).
So I’d like to split a String input on one of the below characters:
- spaces
- underscores
- comma
- colon
- punctuation
- special characters
So I have the following code snippet in iex session:
String.split("testing, one, two car : carpet as java : javascript!!&@$%^& co-operation one_two 1 2", ~r/[\W-[_]|:]+/u, trim: true)
that returns:
["testing", "one", "two", "car", "carpet", "as", "java", "javascript", "co",
"operation", "one", "two", "1", "2"]
I had to substract underscore symbol from \W(any “non-word” character) as it includes it (a-zA-Z_).
As you see, there is still a problem with matching the hyphen in co-operation word.
Whatever I try, whenever I put - in the above regex, nothing works, - it just breaks the previously matching cases.
Any ideas? Thank you.
Marked As Solved
blatyo
Try this: ~r/([^\w\-]|_)+/u
Also Liked
blatyo
Oh, I finally understand what you’re doing. Use this regex instead.
String.split("co-operation tree_five one two 1 2 azerty : double:side", ~r/[^a-zA-Z0-9\-]+/u, trim: true)
#=> ["co-operation", "tree", "five", "one", "two", "1", "2", "azerty", "double",
"side"]
\W-[_] doesn’t mean subtract the underscore from the \W character class. There is no such supported operation in a regex like that which I’m aware of.
NobbZ
I’m not sure what you mean by “substracting the underscore”.
When I simply use ~r/[\W_]/ as the splitter, I get the same result as you with your more complicated regex. It seems as if it were already splitting on -. this way.
blatyo
If I understand your problem, I think you need to escape - in your character class. The reason is that - is used to defined ranges of characters. For example, ~r/[a-z]/ means all characters from a to z, not a, -, and z. You can escape characters in a character class, by using \. So, for the previous example, to get it to mean a, -, and z, you’d do ~r/[a\-z]/.
Hope that helps
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance









