erlang binary
matches -> 始终与最长的进行匹配
match -> 始终与第一个进行匹配
longest_common_prefix -> 共同的前缀的长度
longest_common_suffix -> 共同的后缀的长度
binary:part(<<1,2,3,4,5,6,7>>, {3,4}) == binary:part(<<1,2,3,4,5,6,7>>, {7,-4}).
referenced_byte_size -> 一个2进制数据的引用长度
exp:1> A = binary:copy(<<1>>,100).
<<1,1,1,1,1 ...
2> byte_size(A).
100
3> binary:referenced_byte_size(A)
100
4> <<_:10/binary,B:10/binary,_/binary>> = A.
<<1,1,1,1,1 ...
5> byte_size(B).
10
6> binary:referenced_byte_size(B)
100
获取的结果是100,而不是10,我们想要的只是一个小数据,但是引用却占了很大的资源,一般用binary:copy该资源,在使用copy后的资源
replace
binary:replace(<<1,2,3,4,5>>, <<3>>, <<6>>).
结果 : <<1,2,6,4,5>>
对erlang文档中给的例子又加了一些测试
replace(Subject, Pattern, Replacement, Options) -> Result
binary:replace(<<"abcde">>,<<"b">>,<<"[]">>,[{insert_replaced,0}]).
结果 <<"ab[]cde">>
binary:replace(<<"abcde">>,<<"b">>,<<"[]">>,[{insert_replaced,1}]).
结果<<"a[b]cde">>
binary:replace(<<"abcde">>,<<"b">>,<<"[]">>,[{insert_replaced,2}]).
结果<<"a[]bcde">>
自己总结:{insert_replaced,Num}中的Num是根据Replacement决定的,如果Replacement是<<"">>,Num的取值就是[0],
如果Replacement有元素<<"[]">>,Num的取值就是[0-2],
如果Replacement有元素<<"[-]">>,Num的取值就是[0-3],
如果Replacement有元素<<"[-+]">>,Num的取值就是[0-4],
后面多一个就加一个
binary:replace(<<"abcde">>,[<<"b">>,<<"d">>],<<"[]">>,[global,{insert_replaced,[1,1]}]).
结果<<"a[bb]c[dd]e">>
binary:replace(<<"abcde">>,[<<"b">>,<<"d">>],<<"[]">>,[global,{insert_replaced,[0,0]}]).
结果<<"abb[]cdd[]e">>
binary:replace(<<"abcde">>,[<<"b">>,<<"d">>],<<"[]">>,[global,{insert_replaced,[2,2]}]).
结果<<"a[]bbc[]dde">>
总结:{insert_replaced,[1,1]}.中的[1,1],第一个1的算法就是binary:replace(<<"abcde">>,[<<"b">>,<<"d">>],<<"[]">>,[global,{insert_replaced,1}]).
第2个1的算法就是binary:replace(<<"abcde">>,<<"b">>,<<"[b]">>,[global,{insert_replaced,1}]).如果在有,依次递归。
浙公网安备 33010602011771号