1

Rails3アプリケーションへのJSON投稿を受け取っています。次に、各値を解析して、アプリケーションデータベースに挿入します。すべて正常に機能していますが、データベースに挿入する前に、受信した値を変更したいと思います。

:subject => email_payload['subject']

上記のコードが示すように、「subject」の受信値を「subject」という名前の列に挿入しています。

上記の例では、受信した値は次のようになります。

Results from Example Company - Surname/Firstname/[12345]

私がやりたいのは、[]の間の数値を除いてすべてを取り除くことです。したがって、データベースに挿入される値は単純です。

12345

おそらく、0から9までの任意のものを選択できますが、受信した文字列に正規表現を追加するにはどうすればよいですか?

次のいずれも機能していないようです。

['subject.gsub!([0-9])']
['subject'.gsub!([0-9])]
['subject'].gsub!([0-9])

ここで正規表現をテストしましたhttp://rubular.com/r/AVFkm3A440

4

2 に答える 2

3

.gsub()ハッシュキーによって返される値にを適用しているためemail_payload['subject']、メソッドはクロージングの外側にチェーンされて属し]ます。

/正規表現に区切り文字がありません。グループ全体をキャプチャするには、のようにを追加+/[^0-9]+/ます。は^すべての非数字文字と一致し、.gsub()それらを空の文字列に置き換えます。したがって、以下のパターンは、所定の位置にあるキーemail_payload['subject']を変更します

email_payload['subject'] = 'Results from Example Company - Surname/Firstname/[12345]'

email_payload['subject'].gsub!(/[^0-9]+/, '')
>> "12345"
# gsub!() has mutated the value:
puts email_payload['subject']
>> 12345
于 2012-10-28T13:07:10.487 に答える
2

文字列に関するRubyドキュメントの例:

"hello".gsub(/[aeiou]/, '*')                  #=> "h*ll*"
"hello".gsub(/([aeiou])/, '<\1>')             #=> "h<e>ll<o>"
"hello".gsub(/./) {|s| s.ord.to_s + ' '}      #=> "104 101 108 108 111 "
"hello".gsub(/(?<foo>[aeiou])/, '{\k<foo>}')  #=> "h{e}ll{o}"
'hello'.gsub(/[eo]/, 'e' => 3, 'o' => '*')    #=> "h3ll*"

したがって、gsubは、文字列のパターンをグローバルに置き換えるために使用されます。

おそらく必要scanです。

"Results from Example Company - Surname/Firstname/[12345]".
   scan(/\[(\d*)\]$/).
   flatten
>> ["12345"]

[]これは、選択する数字が角かっこで囲ま]れ、文字列の最後にあることを前提としています。

于 2012-10-28T13:09:50.693 に答える