0

我有以下 Ruby 代码:

require 'rubygems'
require 'rest_client'

url = 'http://asdf.com'
response = RestClient.get(url)
b = response.body

result = b.match(/<head>(.*)<\/head>/)[1]
puts result

当我尝试解析此页面以获取标题时,我收到以下错误:

7:in `<main>': undefined method `[]' for nil:NilClass (NoMethodError)

我在做什么错?(除了使用正则表达式来解析 html。我只是在试验)

4

2 回答 2

4

猜测<head>标签并不都在一条线上。尝试:

result = b.match(/<head>(.*)<\/head>/m)[1]

(注意m,将您切换到多行模式)。

于 2012-08-10T13:20:39.673 回答
0

我在做什么错?(除了使用正则表达式来解析 html。我只是在试验)

您正在使用正则表达式来解析 HTML,这就是您做错了。在这种特殊情况下,您的正则表达式不匹配任何内容,因此返回Regexp#match并且nil您正在尝试调用[].nil

您正在解析的文档如下所示:

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>asdf</title>
  </head>
…

即文档中有换行符。HTML 解析器会忽略换行符,因为它知道它们在 HTML 中无关紧要,但您的正则表达式不会。

于 2012-08-10T13:24:59.867 回答