왜이 문제가 badmatch 오류입니까? 나는 이것이 실패 이유를 알아낼 수 없습니다 :Erlang 바이너리 패턴 일치 실패
<<IpAddr, ":*:*">> = <<"2a01:e34:ee8b:c080:a542:ffaf:*:*">>.
왜이 문제가 badmatch 오류입니까? 나는 이것이 실패 이유를 알아낼 수 없습니다 :Erlang 바이너리 패턴 일치 실패
<<IpAddr, ":*:*">> = <<"2a01:e34:ee8b:c080:a542:ffaf:*:*">>.
패턴 매칭 왼쪽 오른쪽으로 이동하여 다음 세그먼트를 시도하기 전에 IpAddr
과 먼저 일치시킵니다. 경기가있을 때까지 역 추적은 없습니다. IpAddr
과 같은 기본 입력 변수는 1 바이트와 일치합니다. 적절한 설명과 더 많은 예제는 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