mudasobwa
Regex punctuation matchers
AFAIU, Elixir delegates regular expression evaluation to Erlang.
Erlang claims to support Unicode general category matchers.
“ is declared in Unicode spec as LEFT DOUBLE QUOTATION MARK under General punctuation. Both Ruby and Perl do recognize this symbol as opening punctuation:
[0x201C].pack('U*').match /\p{Pi}/
#⇒ #<MatchData "“">
Both Elixir and Erlang, unfortunately, do not:
Regex.scan(~r/[\p{Pi}\p{Pf}\p{Ps}\p{Pe}]/, "'\"“”‘’«»")
#⇒ [[<<171>>], [<<187>>]] # these are « and »
What am I missing and/or what should I tune to make the regex engine to work properly?
Marked As Solved
NobbZ
You forgot to enable unicode mode:
iex(1)> Regex.scan(~r/[\p{Pi}\p{Pf}\p{Ps}\p{Pe}]/, "'\"“”‘’«»")
[[<<171>>], [<<187>>]]
iex(2)> Regex.scan(~r/[\p{Pi}\p{Pf}\p{Ps}\p{Pe}]/u, "'\"“”‘’«»")
[["“"], ["”"], ["‘"], ["’"], ["«"], ["»"]]
Also Liked
mudasobwa
Fair enough.
This is a matter of personal preference and I cordially avoid wasting core team time with such requests ![]()
mudasobwa
Thanks! I wonder how come it’s disabled by default.
NobbZ
Yeah, thats a thing I do not understand as well. Elixir has very good unicode support, but having to remember to explicitely enable it for a regex everytime is a bit…
OvermindDL1
Except you can’t always know if they are parsing a hundred thousand emails for example. But still, if you think it should be on by default, make up a proposal to the elixir core mailing list after a forum thread dedicated to it first. ![]()







