Erlang解析占位符变量
我试图创建一种特殊的模板格式,它必须定位Erlang解析占位符变量,erlang,Erlang,我试图创建一种特殊的模板格式,它必须定位{{{--example_id--}}}}的出现,并单独替换该内容,然后通过括号中的值获取它 我最初的尝试是拆分,下面我发布了一些示例代码,这些代码尚未针对多个占位符进行优化,一次只能处理一个占位符 parse_text() -> Text = <<"this is text {{{--test_placeholder_1--}}} and this also">>, % would not work here
{{{--example_id--}}}}
的出现,并单独替换该内容,然后通过括号中的值获取它
我最初的尝试是拆分,下面我发布了一些示例代码,这些代码尚未针对多个占位符进行优化,一次只能处理一个占位符
parse_text() ->
Text = <<"this is text {{{--test_placeholder_1--}}} and this also">>,
% would not work here:
% Text = <<"this is text {{{--test_placeholder_1--}}} and this {{{--test_placeholder_2--}}} also">>,
[_,Tail] = binary:split(Text, [<<"{{{--">>],[global]),
[Id|_] = binary:split(Tail, [<<"--}}}">>],[global]),
Pattern = <<"{{{--", Id/binary, "--}}}">>,
Replacement = get_content(Id),
Result = binary:replace(Text, Pattern, Replacement),
io:fwrite("~p\n", [Result]).
get_content(<<"test_placeholder_1">>)->
<<"test id 1!">>;
get_content(<<"test_placeholder_2">>)->
<<"test id 2!">>;
get_content(_)->
<<"not found text!">>.
parse_text()->
Text=,
%在这里不起作用:
%Text=,
[\ux,Tail]=二进制:拆分(文本,[],[global]),
[Id ||]=二进制:拆分(尾部,[],[global]),
模式=,
替换=获取内容(Id),
结果=二进制:替换(文本、模式、替换),
io:fwrite(“~p\n”,[Result])。
获取内容()->
;
获取内容()->
;
获取内容(\)->
.
我的问题是,我应该进一步优化它以支持一个文本中的多个占位符,还是有更好的方法来处理这些问题
干杯 我不确定这是否是一个更好的主意,但它适用于多个占位符
parse_text(Input) ->
List = lists:foldr(
fun(E, Acc) ->
case get_content(E) of
<<"not found text!">> -> [E| Acc];
Match -> [Match | Acc]
end
end, [], binary:split(Input, [<<"{{{--">>, <<"--}}}">>], [global])
),
erlang:list_to_binary(List).
get_content(<<"test_placeholder_1">>)->
<<"test id 1!">>;
get_content(<<"test_placeholder_2">>)->
<<"test id 2!">>;
get_content(_)->
<<"not found text!">>.
parse_文本(输入)->
列表=列表:foldr(
乐趣(E,Acc)->
案例获取内容(E)
->[E | Acc];
匹配->[匹配| Acc]
结束
结束,[],二进制:拆分(输入,[,],[global])
),
erlang:list_到_二进制(list)。
获取内容()->
;
获取内容()->
;
获取内容(\)->
.
如果您需要更强大的工具来完成这样的任务
我觉得你应该检查ErlyDTL插件--