質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

1081閲覧

正規表現でaタグのhrefを取得したい

kazuyakazuya

総合スコア193

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2019/07/24 15:46

htmlコードが入ったファイルから正規表現を駆使して

url

1<a href="/questions/158840" title="rubyでslack apiを使ってbotを動かそうとしたが、`require&amp;#039;: cannot load such file -- slack-api (LoadError)とエラーが出る">rubyでslack apiを使ってbotを動かそうとしたが、`require&#039;: cannot load such file -- slack-api (LoadError)とエラーが出る</a>

の中のtitleの中身、ここでいうならば

rubyでslack apiを使ってbotを動かそうとしたが、`require&amp;#039;: cannot load such file -- slack-api (LoadError)とエラーが出る"

を取得するプログラムを作りたいです。(ダブルクォーテーションは含んでも可)

HTMLコードが入っているファイル名はsearch_html.erbです。
ちなみにパス(href)を取得するプログラムは成功しています。

ruby

1matching_class_box = [] #マッチングしたパスが入る。 2matching_name_box = [] #マッチングしたhrefが入る 3File.open("search_html.rb","r",encoding: "UTF-8") do |file| 4 file.each_line do |line| #htmlコードを行単位で読み出す 5 matching_class = line.match(/"/questions/.{1,9}"/)#hrefを正規表現で取り出す 6 matching_class_box.push(matching_class) unless matching_class == nil#正規表現でマッチした時だけ配列に入れる。 7 matching_name = line.match(/title=".*"/)#titleを正規表現で取り出す 8 matching_name_box.push(matching_name) unless matching_name == nil#正規表現でマッチした時だけ配列に入れる。 9 end 10end 11matching_class_box.each do |class_path| 12 puts class_path 13end 14matching_name_box.each do |name_path| 15 puts name_path 16end

結果はこちら

cmd

1"/questions/input" 2"/questions/451" 3"/questions/11650" 4"/questions/159979" 5"/questions/44507" 6"/questions/29835" 7"/questions/23822" 8"/questions/22259" 9"/questions/349" 10"/questions/184271" 11"/questions/88553" 12"/questions/5449" 13"/questions/1937" 14"/questions/167766" 15"/questions/106419" 16"/questions/61837" 17"/questions/200865" 18"/questions/96483" 19"/questions/71396" 20"/questions/130792" 21"/questions/158840" 22"/questions/input" 23"/questions/451" 24"/questions/11650" 25"/questions/159979" 26"/questions/44507" 27"/questions/29835" 28"/questions/23822" 29"/questions/22259" 30"/questions/349" 31"/questions/184271" 32"/questions/88553" 33"/questions/5449" 34"/questions/1937" 35"/questions/167766" 36"/questions/106419" 37"/questions/61837" 38"/questions/200865" 39"/questions/96483" 40"/questions/71396" 41"/questions/130792" 42"/questions/158840" 43title="Ruby &amp;lt;=&amp;gt;について" 44title="DrqYuto" 45title="2019-06-18 22:18" 46title="Rubyに関してです、" 47title="DrqYuto" 48title="2019-03-05 23:08" 49title="rubyについてです。" 50title="katoy" 51title="2018-11-24 03:48" 52title="ruby" 53title="otn" 54title="2016-08-16 22:50" 55title="Rubyの=&amp;gt;について" 56title="katoy" 57title="2016-03-15 21:17" 58title="Rubyについて" 59title="SasakiAkira" 60title="2016-01-07 03:01" 61title="Rubyについて" 62title="2015-12-12 21:40" 63title="Rubyについて" 64title="savior" 65title="2014-05-12 21:59" 66title="[Ruby] データが抜ける、Rubyのバグ?" 67title="kzd847686" 68title="2019-04-15 23:16" 69title="RubyおよびRuby on rails インストールについて" 70title="renren643" 71title="2017-08-17 15:14" 72title="Ruby Rubyで結局オブジェクトとは何なのですか?" 73title="alehalehaleh" 74title="2014-12-17 00:24" 75title="Ruby RubyでiOSアプリを作りたい" 76title="hokuto" 77title="2014-09-08 10:17" 78title="undefined method gsub" 79title="dossy" 80title="2019-01-09 23:36" 81title="Rubyのパスが異なる環境でも動作できるようにするには" 82title="taro373" 83title="2018-01-04 15:36" 84title="rbenvのインストール" 85title="Yuinyan" 86title="2017-01-13 17:55" 87title="ubuntuでrails" 88title="winterboum" 89title="2019-07-16 16:57" 90title="Rails でHerokuにデプロイする時のアプリケーションエラーを解消したいです。" 91title="gomatamago" 92title="2017-10-16 15:27" 93title="Ruby CGIを使う理由がわかりません。" 94title="tqkqt0" 95title="2017-04-05 12:10" 96title="[Ruby on Rails]bundle install でのエラー解決方法" 97title="hahah" 98title="2018-06-13 01:50" 99title="rubyでslack apiを使ってbotを動かそうとしたが、`require&amp;#039;: cannot load such file -- slack-api (LoadError)とエラーが出る" 100title="Gyunpon" 101title="2018-11-19 10:25" 102title="Atom(フォーマット)" val="Atom(フォーマット)" data-id="827">Atom(フォーマット)</a><div class="boxCate" 103title="Google Chrome OS" val="Google Chrome OS" data-id="1227">Google Chrome OS</a><div class="boxCate" 104title="Kibana" val="Kibana" data-id="1031">Kibana</a><div class="boxCate" 105title="PDF" val="PDF" data-id="309">PDF</a><div class="boxCate" 106title="NullPointerException" val="NullPointerException" data-id="294">NullPointerException</a><div class="boxCate" 107title="バージョン管理" val="バージョン管理" data-id="467">バージョン管理</a><div class="boxCate" 108title="Visual Studio 2010" val="Visual Studio 2010" data-id="269">Visual Studio 2010</a><div class="boxCate" 109title="継承" val="継承" data-id="515">継承</a><div class="boxCate" 110title="GPS" val="GPS" data-id="181">GPS</a><div class="boxCate" 111title="JSF" val="JSF" data-id="1043">JSF</a><div class="boxCate"

見ての通り
パスの取得はうまくいったのですが
titleの取得はうまくいきません。
上手に取得する別の方法はないでしょうか?
アドバイスをください。わからないのでお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gouf

2019/07/24 16:18

自己課題かなにかで、「正規表現で」という縛りがありますか? Nokogiri ( https://nokogiri.org/ ) は選択肢に入りますか?
kazuyakazuya

2019/07/24 16:34

ありがとうございます。 nokogiriではファイルに格納されているHTMLコードを 分析することができるのですか? (あえてファイルに書き込んであるhtmlを分析したい) もしそうなら入ります。。
gouf

2019/07/25 00:23

Nokogiri が扱えるのは HTML or XML 情報が構成されている その「文字列」データの解析... ファイルを扱うのは Nokogiri の仕事ではない... なので、一旦 File.read など File クラスのメソッドで文字列データとして読み込む必要がありそうです
kazuyakazuya

2019/07/25 01:11

ありがとうございます。 nokogiriについて詳しく調べてみます。
guest

回答1

0

ベストアンサー

コメントについているように、XML/HTMLパーサーを使うのが応用が利きます。最初の一歩が難しいかもしれませんが。

ちなみにパス(href)を取得するプログラムは成功しています。

hrefを取り出せているなら、それと同様で良いのでは?
書かれているコードにhrefが無いようですが、同様にやって不具合が出ているなら、そのコードを書いてください。

投稿2019/07/25 01:09

otn

総合スコア84557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuyakazuya

2019/07/25 01:14

ありがとうございます。 説明が不十分でした。 hrefの中身です。 正規表現でtitleの中身だけを取り出したいのですが href同様にうまくいくと思いきやうまい取り出し方が思いつきませんでした。。。 正規表現では無理そうなので nokogiriやHTMLパーサーについて調べてみます。
otn

2019/07/25 01:21

if / title=(["'])(.*?)\1/ =~ line title = $2 end ですかね。
kazuyakazuya

2019/07/25 05:44

ありがとうございます。 正規表現でもいけましたね。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問