Erlang Двоичный шаблон, соответствующий неизвестному количеству - PullRequest
2 голосов
/ 22 декабря 2010

Скажите, у меня есть

Bin = <<"10=123">>

Эта функция

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

разбивает ее на

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

Вместо этого мне нужно, чтобы она соответствовала последним 3 числам.Даже если их 345 или 777. Одно точно, это то, что это всегда будет 3 числа.

Так что вместо этого он будет соответствовать всему шаблону

Я не слишком хорош с двоичными файлами, но я верюЯ ищу что-то вроде

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

Ответы [ 2 ]

4 голосов
/ 22 декабря 2010

Я не на 100% уверен, что вы имеете в виду, но если вы хотите соответствовать только части << "123" >>, вы можете просто сделать:

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

Если вы не хотитечтобы совпадать вообще в части << "10 =" >>, просто замените ее выше на "_: 3 / binary".

Если это то, что вы хотите, тогда ваш оригинальный способ работал бы так же хорошо:

1> Bin = <<"10=123">>.
<<"10=123">>
2> [_,Rest] = binary:split(Bin, <<"10=">>).
[<<>>,<<"123">>]
3> Rest.
<<"123">>
4 голосов
/ 22 декабря 2010

двоичный: part / 3 помогает?

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

cf: справочный документ.http://www.erlang.org/doc/man/binary.html#part-3

...