我有一个函数,假设要获取4组8个二进制数,以便将其转换为IP地址。我有这个正则表达式:
def convert_to_decimal(binary_string)
octet1,octet2,octet3,octet4 = /(\d{8})/.match(binary_string).captures
puts octet1
puts octet2
puts octet3
puts octet4
end
我已经在rubular中对此正则表达式进行了测试,并且当我使用字符串10000000001000000000101000000001对其进行测试时,它确认它抓取了4个匹配。但是当我运行实际的ruby代码时,我只得到第一组8个数字。这有什么不对?
答案 0 :(得分:0)
改为使用String#scan
:
def convert_to_decimal(binary_string)
octet1,octet2,octet3,octet4 = binary_string.scan /\d{8}/
puts octet1
puts octet2
puts octet3
puts octet4
end
convert_to_decimal('10000000001000000000101000000001')
输出:
10000000
00100000
00001010
00000001
如果要使用MatchData#captures
,请修改正则表达式以包含四个捕获的组,因为MatchData#captures
返回捕获的组的数组不匹配:
octet1,octet2,octet3,octet4 =
/(\d{8})(\d{8})(\d{8})(\d{8})/.match(binary_string).captures