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>タグはすべて 1 行に収まっていません。試す:

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 に答える