如何为erlang字符串(列表)进行模式匹配?

时间:2017-04-28 02:40:50

标签: erlang

我有一个字符串"{request, {M, F, A}}",我知道它的类型是列表,但我不能使用[..]进行模式匹配。如何从中提取request{M, F, A}

2 个答案:

答案 0 :(得分:2)

您可以在字符串的开头进行模式匹配。您可以尝试这样的事情:

1> Strip = fun(Input) -> lists:reverse(tl(lists:reverse(Input))) end.
#Fun<erl_eval.6.54118792>
2> Parse = fun(Input) ->
2>    "{" ++ Tail = Input,
2>    case Tail of
2>       "request, " ++ MFT -> {request1, Strip(MFT)};
2>       "request2, " ++ MFT -> {request2, Strip(MFT)}
2>    end
2> end.
#Fun<erl_eval.6.54118792>
3> Parse("{request, {M, F, A}}").
{request1,"{M, F, A}"}
4> Parse("{request2, {M, F, A}}").
{request2,"{M, F, A}"}
5>

答案 1 :(得分:1)

如果您确定该字符串看起来与"{request, {M, F, A}}"完全相同,则可以这样匹配:

[_, $r, $e, $q, $u, $e, $s, $t, _, _, ${, $M, _, $F, _, $A, $}, _] = "{request, {M, F, A}}"

你可以玩这个