为什么我无法从Regexp中获取所有4个匹配数据?

时间:2014-05-24 01:45:51

标签: ruby regex

我有一个函数,假设要获取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个数字。这有什么不对?

1 个答案:

答案 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