如何在Erlang中替换双引号

时间:2016-01-02 18:30:59

标签: erlang

对于Erlang专家来说,这可能是一个相当简单的问题 - 我正在尝试让我的ejabberd服务器存储离线消息(在Riak数据库中),其本身包含围绕各种值的双引号("),当我尝试从它们创建Riak数据库对象时出现格式错误,并且使用转义字符(\")替换双引号的测试更正了问题。问题是如何手动更换?

我尝试了以下代码,但不知何故不起作用。

(ejabberd@xxx-xx-xx-xxx)4> re:replace(""hello"", """, "\"", [{return, list}, global]).    
* 1: syntax error before: hello

所以基本上我试图用"替换hello字周围的嵌入式\"

2 个答案:

答案 0 :(得分:3)

我不知道Erlang,但你可能需要这样的东西:

"\"hello\"", "\"", "\\\""

答案 1 :(得分:2)

您必须在替换字符串中转义"\

  

字符串的Erlang文字语法使用“\”(反斜杠)   字符作为转义码。你需要在文字中逃避反斜杠   代码和shell中的字符串,附加一个   反斜杠,即:“\”。

示例:

我们举个例子。我使用$ Erlang符号替换为字符的ascii整数,以显示每个字符串后面发生的事情,基本上是一个整数列表。

Subject = [$"] ++ "hello" ++ [$"] = "\"hello\"".
Target = [$"] = "\"".
Replacement = [$\\, $\\, $"] = "\\\\\"".
Result = re:replace(Subject, Target, Replacement, [{return, list}, global]).

现在,通过获取SubjectResult的长度,我们可以找到差异:

7 = length(Subject). %% => 7 characters: " h e l l o "
9 = length(Result). %% => 9 characters: \ " h e l l o \ "