在Ruby中查找带正则表达式的所有结果

时间:2014-12-10 20:40:16

标签: ruby

您好我正在研究Ruby正则表达式并且有一些我不能做的事情,我有一个名为http://localhost/test.php的网站,它返回以下内容:

HI WORLD 1 OK
HI WORLD 2 OK
HI WORLD 3 OK
HI WORLD 4 OK
HI WORLD 5 OK
HI WORLD 6 OK

我使用的代码就是这个

require "open-uri"
require "net/http"  

def toma(web)
    begin
        return open(web, "User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0").read
    rescue
        return "Error"
    end
end

code = toma("http://localhost/test.php")

if code=~/WORLD (.*) OK/
    test = $1
    print test+"\n"
end

发生的事情只包括第一个参数,我希望找到所有这些参数,但是当我在标记脚本时更改if by并且在无限循环中始终显示相同时。

想法是返回类似的东西:

1
2
3
4
5
6

来源更新:

lines = code.scan(/WORLD (.*) (.*) OK/)

lines.flatten.each do |line|
    begin
        print line[1]+"\n"
    end
end

2 个答案:

答案 0 :(得分:0)

如果您是Ruby的新手,请花些时间熟悉像String这样的核心类上可用的各种方法。那里有很多非常方便的工具。

例如,String#scan在这方面做得很好:

code.scan(/WORLD (.*) OK/)
# => [["1"],["2"],...]

您可以使用flatten将其转换为常规数组。

答案 1 :(得分:0)

如果您的数据真的如此,则不需要正则表达式:

str =<<THE_VERY_END
HI WORLD 1 OK
HI WORLD 2 OK
HI WORLD 3 OK
HI WORLD 4 OK
HI WORLD 5 OK
HI WORLD 6 OK
THE_VERY_END
  #=>=> "HI WORLD 1 OK\nHI WORLD 2 OK\nHI WORLD 3 OK\nHI WORLD 4 OK\nHI WORLD 5 OK\nHI WORLD 6 OK\n"

str.lines.map(&:split).transpose[2]
  #=> ["1", "2", "3", "4", "5", "6"]

如果你想要整数,请将.map(&:to_i)添加到最后。