Erlang二进制模式匹配未知数量

时间:2010-12-22 01:22:43

标签: erlang binary design-patterns

说我有

Bin = <<"10=123">>

此功能

binary:split(Bin, <<"10=">>),

将其拆分为

[<<"10=">>, <<"123">>]

相反,我需要它来匹配最后3个数字。 即使它的345或777。 肯定的是,它总是3个数字。

所以它会匹配整个模式

我对二进制文件不太好,但我相信我正在寻找像

这样的东西
 binary:split(Bin, <<01,"10=", 3/binary>>),

2 个答案:

答案 0 :(得分:4)

binary:part / 3有帮助吗?

binary:part(Bin, byte_size(Bin), -3).

cf:参考文档。 http://www.erlang.org/doc/man/binary.html#part-3

答案 1 :(得分:4)

我不是100%确定你的意思,但如果你只想匹配&lt;&lt;“123”&gt;&gt;那么你可以简单地做一下:

1> <<"10=", Rest/binary>> = <<"10=123">>.
<<"10=123">>
2> Rest.
<<"123">>

如果您不想在&lt;&lt;“10 =”&gt;&gt;上完全匹配部分只是用“_:3 / binary”替换它。

如果这是您想要的,那么您的原始方式将起到同样的作用:

1> Bin = <<"10=123">>.
<<"10=123">>
2> [_,Rest] = binary:split(Bin, <<"10=">>).
[<<>>,<<"123">>]
3> Rest.
<<"123">>