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

9udxz4iz  于 2022-12-08  发布在  Erlang
关注(0)|答案(3)|浏览(273)

我有一段代码,它获取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不是一个建议的做事方法。

qf9go6mv

qf9go6mv1#

您的解决方案很有效,如果您对它感到满意,就应该保留它。
在我这边,我更喜欢列表理解:[case X of ${ -> $a; _ -> X end || X <- StringForOldSessionID ].(只是因为我不必检查函数文档:o)

gpnt7bae

gpnt7bae2#

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

这是一个好的方法吗?我读到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格式化为字符串。

7dl7o3gd

7dl7o3gd3#

从Erlang OTP 20.0开始,您可以使用字符串模块中的string:replace/3函数。
string:replace/3 -将String中的SearchPattern替换为Replacement。第三个函数参数指示是否要替换SearchPattern的前导、尾随或所有遇到的SearchPattern。

string:replace(Input, "{", "a", all).

相关问题