2012-07-02 4 views

ответ

5

соответствие шаблона бинарных доходов лево- чтобы он соответствовал IpAddr, прежде чем он попытается выполнить следующий сегмент. Нет следа назад, пока не появится совпадение. По умолчанию типизированная переменная типа IpAddr соответствует одному байту. См. Bit Syntax Expressions и Bit Syntax для правильного описания и других примеров.

В качестве альтернативы использованию сочетания шаблонов здесь вы можете рассмотреть возможность использования модуля binary. Есть две функции, которые могут быть вам полезны: binary:match/2/3 и binary:split/2/3. Эти поиски, которые могут лучше соответствовать вашей проблеме.

В качестве последней альтернативы вы можете попробовать использовать регулярные выражения и модуль re.

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">> 
+0

Что делать, если размер является переменной? – jshadyjlo

+2

Это не произойдет в этом случае, верно? Если это так, число байтов также может быть прочитано из переменной: «IpAddr: IpLength/binary'. –

+0

К сожалению, в этом случае количество символов в сегменте eacg может варьироваться. – rvirding