您好我正在研究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
答案 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)
添加到最后。