我有一段代码,它获取sessionid,将其变为字符串,然后创建一个带有key的集合,例如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不是一个建议的做事方法。
3条答案
按热度按时间qf9go6mv1#
您的解决方案很有效,如果您对它感到满意,就应该保留它。
在我这边,我更喜欢列表理解:
[case X of ${ -> $a; _ -> X end || X <- StringForOldSessionID ]
.(只是因为我不必检查函数文档:o)gpnt7bae2#
这是一个好的方法吗?我读到Erlang中的regexp不是一个建议的做事方法。
根据official documentation:
2.5误区:琴弦慢
实际上,如果处理不正确,字符串处理可能会很慢。在Erlang中,你必须多考虑字符串的使用方式,选择合适的表示法,如果你要使用正则表达式,就使用re模块而不是过时的regexp模块。
所以,要么用re表示字符串,要么:
如果N是{{1401,873063,143916},<0.16443.0>},那么
{{A,B,C},Pid} = N
然后将A、B、C、Pid格式化为字符串。
7dl7o3gd3#
从Erlang OTP 20.0开始,您可以使用字符串模块中的string:replace/3函数。
string:replace/3 -将String中的SearchPattern替换为Replacement。第三个函数参数指示是否要替换SearchPattern的前导、尾随或所有遇到的SearchPattern。