如何替换字符串Erlang中的字符?

时间:2014-06-04 10:16:07

标签: regex erlang

我有这段代码获取sessionid,使其成为一个字符串,然后创建一个带密钥的集合,例如redis中的{{1401,873063,143916},<0.16443.0>}。我正在尝试使用字母“a”替换此会话中的{个字符。

OldSessionID= io_lib:format("~p",[OldSession#session.sid]),
StringForOldSessionID = lists:flatten(OldSessionID),
ejabberd_redis:cmd([["SADD", StringForSessionID, StringForUserInfo]]);

我试过这个:

re:replace(N,"{","a",[global,{return,list}]).

这是一个很好的方法吗?我读到Erlang中的regexp不是一种建议的做事方式。

2 个答案:

答案 0 :(得分:6)

你的解决方案有效,如果你对它感到满意,你应该保留它。

在我这边,我更喜欢列表理解:[case X of ${ -> $a; _ -> X end || X <- StringForOldSessionID ]。 (仅仅因为我不必检查功能文档:o)

答案 1 :(得分:2)

re:replace(N,"{","a",[global,{return,list}]).
     

这是一个很好的方法吗?我读到Erlang中的regexp不是   建议的做事方式。

根据official documentation

2.5神话:字符串很慢

实际上,如果操作不当,字符串处理可能会很慢。在Erlang中,如果要使用正则表达式,则必须更多地考虑字符串的使用方式并选择合适的表示形式,使用re模块而不是过时的regexp模块

因此,您可以将re用于字符串,或者:

离开{后面(使用模式匹配) 如果,例如,N是{{1401,873063,143916},&lt; 0.16443.0&gt;},那么

{{A,B,C},Pid} = N

然后将A,B,C,Pid格式化为字符串。