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

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

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

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

Q&A

解決済

2回答

1482閲覧

rubyのscanメッソド使用時の正規表現について

Kimsehwa

総合スコア312

Ruby

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

0グッド

0クリップ

投稿2016/11/06 12:11

/tmp/test

export Lemon = "http://sss*.com"

上記のようなファイルから
ダブルクォーテーションに囲まれてる値をvalueとして取得したいです。

scanメッソドと[\w]という文字クラスを利用して一部は取得できましたが、
特殊文字が入ってる場合うまく取得できなかったため
正規表現を勉強して直そうとしてますが、よく方法がわかりません。

@@fruit = {"Lemon" => "100", "Orange" => '150'} File.foreach("/tmp/test") do | line | @@fruit.merge(line.scan(/(\w+)=["']?(.\w*)["']?/).map{|k,v| [k.to_sym, v.to_sym]}.to_h) end puts @@fruit

上記のようなコードの中で
["']?(.\w*)["']?の部分に
特殊文字が入った場合の条件も入れたいです。どのように書けばよいか教えていただけますでしょうか。

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

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

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

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

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

guest

回答2

0

”abc"d" のような " を含むを場合も考慮してみました。

data.txt

export Lemon1 = "http://sss1.com" export Lemon2 = "http://sss2*.com" export Lemon3 = "http://sss3.\"com" export Lemon4 = "" xxxx = zzzz

x.rb

ruby

1REGEXP = /([\w|_]+)\s*=\s*"(.*)"\s*/ 2fruit = {} 3File.foreach('data.txt') do |line| 4 fruit.merge!(line.scan(REGEXP).to_h) 5end 6puts fruit

実行例:

$ ruby x.rb {"Lemon1"=>"http://sss1.com", "Lemon2"=>"http://sss2*.com", "Lemon3"=>"http://sss3.\\\"com", "Lemon4"=>""}

投稿2016/11/06 16:59

katoy

総合スコア22324

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

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

0

ベストアンサー

\w(英数字)じゃなくて、[^"'](引用符以外)を使います。
イコールの前後に空白があるようなのでそれも考慮すると、

Ruby

1/(\w+)\s*=\s*["']?([^"']*)["']?/

投稿2016/11/06 12:37

otn

総合スコア84529

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

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

Kimsehwa

2016/11/06 13:06

ご回答ありがとうございます。 なるほど。。"'がくるわけないのでそれ以外の繰り返しを特定することですかね、 勉強になりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問