Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby匹配并打印数据中的多个字符串_Ruby - Fatal编程技术网

Ruby匹配并打印数据中的多个字符串

Ruby匹配并打印数据中的多个字符串,ruby,Ruby,我在web上的某个位置有一个hashes.xml。我想对字段name='hash'>78235A2449BA7188CBF95F7DD2D40A36进行解析,该文件有许多具有这种模式的字段(MD5哈希只是一个示例,它们在XML文档中有所不同),我想将它们全部获取并打印到标准输出。就我所能做的来说,就是把第一次出现的东西拿出来打印出来,然后我就卡住了 for locale in (locales) while hash.nil? do headers = { 'Host'

我在web上的某个位置有一个hashes.xml。我想对字段
name='hash'>78235A2449BA7188CBF95F7DD2D40A36
进行解析,该文件有许多具有这种模式的字段(MD5哈希只是一个示例,它们在XML文档中有所不同),我想将它们全部获取并打印到标准输出。就我所能做的来说,就是把第一次出现的东西拿出来打印出来,然后我就卡住了

for locale in (locales)
  while hash.nil? do
    headers = {
      'Host' => server,
      'Content-Type' => 'application/x-www-form-urlencoded',
      'Content-Length' => locale.length.to_s,
    }

    resp, data = http.post(path, locale, headers)

    # Extract the hash
    data =~ /name='hash'\>\<string\>([A-F0-9]+).*\<\/string\>/m
    hash = $1
    mylocale = locale
    break if hash.nil?
  end
end

if hash.nil?
  puts "ERROR"
  exit(1)
end

puts "Hash: "+hash
中的区域设置(区域设置)
而hash.nil?做
标题={
“主机”=>服务器,
“内容类型”=>“应用程序/x-www-form-urlencoded”,
“内容长度”=>locale.Length.to_,
}
resp,data=http.post(路径、区域设置、标题)
#提取散列
数据=~/name='hash'\>\([A-F0-9]+).\/m
散列=$1
mylocale=locale
如果hash.nil中断?
结束
结束
如果hash.nil?
“错误”
出口(1)
结束
放置“散列”:+散列

您正在寻找扫描方法:

a =<<END
this is some example name='hash'><string>AAAAAA224</string>

name='hash'><string>AAAAAA224</string>
vname='hash'><string>AAAAAA224</string>
example  for you name='hash'><string>666</string>

END

m = a.scan(/name='hash'><string>[A-F0-9]+.*<\/string>/)

puts m.inspect
a=aaaaaa 224
vname='hash'>aaaaaa 224
您的姓名class='hash'>666的示例
结束
m=a.scan(/name='hash'>[a-F0-9]+.*/)
把m
结果是:

["name='hash'><string>AAAAAA224</string>", "name='hash'><string>AAAAAA224</string>", "name='hash'><string>AAAAAA224</string>", "name='hash'><string>666</string>"]
[“name='hash'>aaaaa 224”,“name='hash'>aaaaa 224”,“name='hash'>aaaaa 224”,“name='hash'>666”]

你也可以看到帖子。

看看String#scan方法。是的,谢谢izomorphius,这很有效:)只是“m=a.scan(/name='hash'>[a-F0-9]+.*/)”而不是“$m=a.scan(/name='hash'>[a-F0-9]+./”,事实上,我使用$m能够在irb中加载脚本并查看$m的竞赛。对于这个例子,仅仅m就足够了。我将编辑我的帖子。非常感谢您的帮助:)