Почему эта проблема вызывает ошибку badmatch? Я не могу понять, почему это будет терпеть неудачу:Ошибка совпадения двоичных изображений Erlang
<<IpAddr, ":*:*">> = <<"2a01:e34:ee8b:c080:a542:ffaf:*:*">>.
Почему эта проблема вызывает ошибку badmatch? Я не могу понять, почему это будет терпеть неудачу:Ошибка совпадения двоичных изображений 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