人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ある文字列の間の文字だけを取得すにはどうすればよいでしょうか?rubyの質問です。
文字列というよりスレイピングしたhtmlの中から抜き出したいのですが。
下記のようなソースを抜出し.to_sを利用して文字列にしたとします。
<input type="hidden" name="input" value="sitename" />
この中で欲しい文字列がvalueの中に含まれる「sitename」だとします。
他の箇所はそのまですが、肝心のsitenameは取ってくるページによって変化します。
たぶん正規表現かgsubを使えばいいのかなと思っているのですが、いざやってみるとイメージようにうまく抜き出すことができません。抜き出せてもやたら長いソースコードになってしまいます。
スマートに短いソースで「sitename」の箇所だけを抜き出す方法はありませんか?


●質問者: osietekudasaibadr
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
ベストアンサー

質問がふわっとしているので、探り気味に。

スクレイピングだと、書き捨てのスクリプトも多いので、ぼくは、こんな感じで書くことが多いです。

while 一行ずつのループ
 line = ... # 一行の文字列のつもり
 if /<input .*name="input"/ =~ line then # 抽出対象の行を特定する if のつもり
 if /value="([^"]+)"/ =~ line then # value の値をグループ化する正規表現でマッチ
 puts $1 # グループ化した対象を $1 で抽出
 end
 end
end

最初は、一番内側の if が無い状態で試して、抽出対象の行だけを抜き出せるかを確認してから、その行から対象の文字列を抜き出す。
文字列を抜き出すときは、正規表現でマッチして () でグルーピングして取り出すのが分かりやすいです。
正規表現が長くなると、ソースが水楽なるので、こんな感じで書くことも。

RE_LINE = /<input .*name="input"/
RE_WORD = /value="([^"]+)"/
while 一行ずつのループ
 line = ... # 一行の文字列のつもり
 if RE_LINE =~ line then # 抽出対象の行を特定する if のつもり
 if RE_WORD =~ line then # value の値をグループ化する正規表現でマッチ
 puts $1 # グループ化した対象を $1 で抽出
 end
 end
end

osietekudasaibadrさんのコメント
a-kuma3さんいつもありがとうございます。 ご回答いただいた通りにやってみたら、思う通りの結果ができました。 ほんとうにありがとうございます!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ