为什么会出现badmatch错误?我无法弄清楚为什么会失败:
<<IpAddr, ":*:*">> = <<"2a01:e34:ee8b:c080:a542:ffaf:*:*">>.
答案 0 :(得分:6)
您需要指定IpAddr
的大小,以便它可以进行模式匹配:
1> <<IpAddr:28/binary, ":*:*">> = <<"2a01:e34:ee8b:c080:a542:ffaf:*:*">>.
<<"2a01:e34:ee8b:c080:a542:ffaf:*:*">>
2> IpAddr.
<<"2a01:e34:ee8b:c080:a542:ffaf">>
答案 1 :(得分:5)
二进制的模式匹配从左到右进行,因此在尝试以下段之前它将首先匹配IpAddr
。在匹配之前没有回溯。像IpAddr
这样的默认类型变量匹配一个字节。有关正确的说明和更多示例,请参阅Bit Syntax Expressions和Bit Syntax。
作为使用模式匹配的替代方法,您可以考虑使用binary
模块。有两个功能可能对您有用:binary:match/2/3
和binary:split/2/3
。这些搜索可能更适合您的问题。
作为最后一种选择,您可以尝试使用正则表达式和re
模块。