這個問題爲什麼會出現不匹配錯誤?我想不通爲什麼會失敗: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