我有这段代码获取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不是一种建议的做事方式。
答案 0 :(得分:6)
你的解决方案有效,如果你对它感到满意,你应该保留它。
在我这边,我更喜欢列表理解:[case X of ${ -> $a; _ -> X end || X <- StringForOldSessionID ]
。 (仅仅因为我不必检查功能文档:o)
答案 1 :(得分:2)
re:replace(N,"{","a",[global,{return,list}]).
这是一个很好的方法吗?我读到Erlang中的regexp不是 建议的做事方式。
2.5神话:字符串很慢
实际上,如果操作不当,字符串处理可能会很慢。在Erlang中,如果要使用正则表达式,则必须更多地考虑字符串的使用方式并选择合适的表示形式,使用re模块而不是过时的regexp模块。
因此,您可以将re用于字符串,或者:
离开{后面(使用模式匹配) 如果,例如,N是{{1401,873063,143916},&lt; 0.16443.0&gt;},那么
{{A,B,C},Pid} = N
然后将A,B,C,Pid格式化为字符串。