这个问题为什么会出现不匹配错误?我想不通为什么会失败:Erlang二进制模式匹配失败
<<IpAddr, ":*:*">> = <<"2a01:e34:ee8b:c080:a542:ffaf:*:*">>.
这个问题为什么会出现不匹配错误?我想不通为什么会失败:Erlang二进制模式匹配失败
<<IpAddr, ":*:*">> = <<"2a01:e34:ee8b:c080:a542:ffaf:*:*">>.
模式匹配左所以在它尝试以下细分之前,它将首先匹配IpAddr
。直到比赛结束后才会有回溯。像IpAddr
这样的默认类型变量匹配一个字节。有关正确的描述和更多示例,请参见Bit Syntax Expressions和Bit Syntax。
作为在这里使用模式匹配的替代方法,您可以考虑使用binary
模块。有两个功能可能对您有用:binary:match/2/3
和binary:split/2/3
。这些搜索可能更适合您的问题。
作为最后一种选择,您可以尝试使用正则表达式和re
模块。
你需要指定的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">>
如果大小可变,该怎么办? – jshadyjlo
这种情况不会发生在这种情况下,对吧?如果是这样,字节数也可以从变量读取:'IpAddr:IpLength/binary'。 –
不幸的是,在这种情况下,它可以随eacg段中的字符数量而变化。 – rvirding