[erlang-questions] escaping values for re:replace

Fred Hebert <>
Tue Jul 27 23:49:09 CEST 2010


Using a fold would be a bit cleaner. I used something like this to write a
quick (and not comprehensive) sluggifying function for French URLs. It
replaces accented characters by their normal counterpart, takes anything
that isn't a character or number and makes it a dash (-), then reduces
multiple dashes to a single one.

sluggify(Str) ->
   Patterns = [{"[âäàáÀÄÂÁ]", "a"},
               {"[éêëèÉÊËÈ]", "e"},
               {"[ïîíìÏÎÌÍ]", "i"},
               {"[öôòóÖÔÒÓ]", "o"},
               {"[üûùúÜÛÙÚ]", "u"},
               {"[ÿýÝ]", "y"},
               {"[çÇ]", "c"},
               {"[^\\w\\d_-]", "-"},
               {"[-]{2,}", "-"},
               {"(?:^-)|(?:-$)", ""}],
   Slug = lists:foldl(fun({Pat, Rep}, Slug) ->
       re:replace(Slug, Pat, Rep, [global, {return, binary}])
   end,
   Str,
   Patterns).

I guess you could use something like that.

On Tue, Jul 27, 2010 at 4:53 PM, Wes James <> wrote:

> I created a function:
>
> escape(S) ->
>        S2=re:replace(S, "\\*", "\\\\*", [{return,list}, global]),
>        S3=re:replace(S2, "\\[", "\\\\[", [{return,list}, global]),
>        S4=re:replace(S3, "\\(", "\\\\(", [{return,list}, global]),
>        re:replace(S4, "\\)", "\\\\)", [{return,list}, global]).
>
> to escape the values I know. Is there a more erlang way to do this?
> I'm trying to replace all *, [, (, ) with the escaped values.
>
> thx,
>
> -wes
>
> ________________________________________________________________
> erlang-questions (at) erlang.org mailing list.
> See http://www.erlang.org/faq.html
> To unsubscribe; mailto:
>
>


More information about the erlang-questions mailing list