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}]).如果在有,依次递归。

posted on 2014-09-03 11:24  Vinlan  阅读(341)  评论(0)    收藏  举报

导航