从文件中读取固定大小的前几个字节和从第一个正则表达式';中读取剩余字节的正确正则表达式是什么;ruby中的s(.*)部分?
我正在使用ruby读取一个文件,其中我在代码中编写了regexp,如下所示,假设它将读取文件中的前4个字节,接下来的4个字节,接下来的4个字节,除了文件中最后8个字节之外的其余字节。 现在,我尝试使用以下代码从这些可变大小的数据(.*)进一步拆分字节。这种方法正确吗?我得到了结果,但仍然不确定它们是否正确 这是扫描first从文件中读取固定大小的前几个字节和从第一个正则表达式';中读取剩余字节的正确正则表达式是什么;ruby中的s(.*)部分?,ruby,regex,file,byte,Ruby,Regex,File,Byte,我正在使用ruby读取一个文件,其中我在代码中编写了regexp,如下所示,假设它将读取文件中的前4个字节,接下来的4个字节,接下来的4个字节,除了文件中最后8个字节之外的其余字节。 现在,我尝试使用以下代码从这些可变大小的数据(.*)进一步拆分字节。这种方法正确吗?我得到了结果,但仍然不确定它们是否正确 这是扫描firstdo..end中第一个正则表达式剩余星号部分的内容,然后再次扫描seconddo..endregex中剩余字节的正确方法吗 File.open(filename,'rb')
do..end
中第一个正则表达式剩余星号部分的内容,然后再次扫描seconddo..end
regex中剩余字节的正确方法吗
File.open(filename,'rb') do |file|
file.read.scan(/(.{4})(.{4})(.{4})(.*)(.{8})/m).each do |a,b,c,d,e|
puts "\Content 1:#{a}\n\n"
b1 = b.unpack("N")
puts "\n\nContent 2:\n#{b1}\n\n"
puts "\n\nContent 3:\n#{c.unpack("N")}\n\n"
d.scan(/(.{4})(.{4})(.{4})(.*)/).each do |p,q,r,s|
puts "\n\nPContent 4:\n#{p.unpack("N")}\t"
puts "Content 5\n:#{q.unpack("e")}\t"
puts "Content 6:\n#{r.unpack("e")}\t"
s.scan(/(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.*)/).each do |f,g,h,i,j,k,l,m,n,o,p|
puts "Content 7:#{f.unpack("e")}"
puts "Content 8:#{g.unpack("B")}"
puts "Content 9:#{h.unpack("B")}"
puts "Content 10:#{i.unpack("B")}"
puts "Content 11:#{j.unpack("e")}"
puts "Content 12:#{k.unpack("e")}"
puts "Content 13:#{l.unpack("e")}"
puts "Content 14:#{m.unpack("B")}"
puts "Content 15:#{n.unpack("B")}"
puts "Content 16:\t#{o}#{p}"
end
end
我觉得不错
建议使用\A和\z将扫描定位在字符串的开头和结尾
/\A...\z/
在我看来,这样可以更容易地快速看到您想要匹配整个字符串,而不是使用#scan来迭代匹配。它的执行速度也可能更快。我如何检测空终止ASCII(0x00)字符串?我已经为您发布了这个,它是一个很棒的“即时”工具,可以用来处理regexp