繁体   English   中英

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

[英]How to replace characters in string Erlang?

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

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 中的正则表达式不是建议的做事方式。

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

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

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

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

根据官方文件

2.5误区:弦乐很慢

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

因此,您可以对字符串使用re,或者:

如果N是{{1401,873063,143916},<0.16443.0>},则将{留在后面(使用模式匹配)

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

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

由于 Erlang OTP 20.0,您可以使用 string 模块中的string:replace/3 function。

string:replace/3 - 用 Replacement 替换 String 中的 SearchPattern。 第 3 个 function 参数表示是否替换 SearchPattern 的前导、尾随或所有遭遇。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM