对于Erlang专家来说,这可能是一个相当简单的问题 - 我正在尝试让我的ejabberd服务器存储离线消息(在Riak数据库中),其本身包含围绕各种值的双引号("
),当我尝试从它们创建Riak数据库对象时出现格式错误,并且使用转义字符(\"
)替换双引号的测试更正了问题。问题是如何手动更换?
我尝试了以下代码,但不知何故不起作用。
(ejabberd@xxx-xx-xx-xxx)4> re:replace(""hello"", """, "\"", [{return, list}, global]).
* 1: syntax error before: hello
所以基本上我试图用"
替换hello字周围的嵌入式\"
。
答案 0 :(得分:3)
我不知道Erlang,但你可能需要这样的东西:
"\"hello\"", "\"", "\\\""
答案 1 :(得分:2)
您必须在替换字符串中转义"
和\
。
字符串的Erlang文字语法使用“\”(反斜杠) 字符作为转义码。你需要在文字中逃避反斜杠 代码和shell中的字符串,附加一个 反斜杠,即:“\”。
示例:强>
我们举个例子。我使用$
Erlang符号替换为字符的ascii整数,以显示每个字符串后面发生的事情,基本上是一个整数列表。
Subject = [$"] ++ "hello" ++ [$"] = "\"hello\"".
Target = [$"] = "\"".
Replacement = [$\\, $\\, $"] = "\\\\\"".
Result = re:replace(Subject, Target, Replacement, [{return, list}, global]).
现在,通过获取Subject
和Result
的长度,我们可以找到差异:
7 = length(Subject). %% => 7 characters: " h e l l o "
9 = length(Result). %% => 9 characters: \ " h e l l o \ "