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

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

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

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

Q&A

解決済

1回答

990閲覧

rubyのinclude?を正しく機能させられない

cutter

総合スコア140

Ruby

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

0グッド

0クリップ

投稿2017/01/24 12:01

とあるサイトにて、https://sample.com/?p=123 となるようなhref属性を持ったAタグが多数あります。
それらを取得して吐き出すと正確にAタグは取れており、p=を含むリストが多数あることがわかります。

しかし、下記コードにて、p=を含むものだけを吐き出そうとしても、1つも吐き出されません。
Win10にインストーラにてruby環境を構築しています。

スクリプト自体はUTF-8ですが、文字エンコーディングの変換などが必要なのでしょうか。

ruby

1 # Aタグを抽出 2 href_list = driver.page_source.scan(%r!<a href="([^\"]+)">!) 3 4 # p href_list 5 href_list.each do |href| 6 check = href.include?("p=") 7 if check 8 print("文字列の中に「p=」は含まれます¥n") 9 puts href 10 end 11 end

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

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

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

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

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

guest

回答1

0

ベストアンサー

String#scanの仕様を誤解されています。

リファレンスより:

scan(pattern) -> [String] | [[String]]

self に対して pattern を繰り返しマッチし、マッチした部分文字列の配列を返します。
pattern が正規表現で括弧を含む場合は、括弧で括られたパターンにマッチした部分文字列の配列の配列を返します。

お書きの例では、括弧を含む正規表現なので、文字列の配列の配列を返します。
従って、hrefは文字列の配列です。

check = href[0].include?("p=")として下さい。

投稿2017/01/24 12:10

otn

総合スコア84423

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

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

cutter

2017/01/24 12:16

出来ました、rubyは初めたばかりで助かりましたm(__)m ありがとう御座います!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問