проблема расщепления рубиновой строки - PullRequest
1 голос
/ 16 мая 2011

у меня есть эта строка: "asdasda = asdaskdmasd & asmda = asdasmda & ACK = Success & asdmas = asdakmsd & asmda = adasda"

я хочу получить значение после ACK и символа &, значение между ACK и символом &символ можно изменить ...

спасибо

я хочу решение в рубине.

Ответы [ 4 ]

5 голосов
/ 16 мая 2011
require "cgi"

query_string = "asdasda=asdaskdmasd&asmda=asdasmda&ACK=Success&asmda=asdakmsd"
parsed_query_string = CGI.parse(query_string)
#=> { "asdasda" => ["asdaskdmasd"],
#     "asmda" => ["asdasmda", "asdakmsd"],
#     "ACK" => ["Success"] }

parsed_query_string["ACK"].first
#=> "Success"

Если вы также хотите восстановить строку запроса (особенно вместе с остальной частью URL-адреса), я бы порекомендовал изучить гем addressable.

require "addressable/uri"

# Note the leading '?'
query_string = "?asdasda=asdaskdmasd&asmda=asdasmda&ACK=Success&asmda=asdakmsd"
parsed_uri = Addressable::URI.parse(query_string)
parsed_uri.query_values["ACK"]
#=> "Success"

parsed_uri.query_values = parsed_uri.query_values.merge("ACK" => "Changed")
parsed_uri.to_s
#=> "?ACK=Changed&asdasda=asdaskdmasd&asmda=asdakmsd"
# Note how the order has changed and the duplicate key has been removed due to
# Addressable's built-in normalisation.
0 голосов
/ 16 мая 2011

Быстрый подход:

s = "asdasda=asdaskdmasd&asmda=asdasmda&ACK=Success&asdmas=asdakmsd&asmda=adasda"
s.gsub(/ACK[=\w]+&/,"ACK[changedValue]&")
   #=> asdasda=asdaskdmasd&asmda=asdasmda&ACK[changedValue]&asdmas=asdakmsd&asmda=adasda
0 голосов
/ 16 мая 2011
"asdasda=asdaskdmasd&asmda=asdasmda&ACK=Success&asdmas=asdakmsd&asmda=adasda"[/ACK=([^&]*)&/]
$1 # => 'Success'
0 голосов
/ 16 мая 2011
s = "asdasda=asdaskdmasd&asmda=asdasmda&ACK=Success&asdmas=asdakmsd&asmda=adasda"
m = s.match /.*ACK=(.*?)&/
puts m[1]

и просто для удовольствия без регулярных выражений:

Hash[s.split("&").map{|p| p.split("=")}]["ACK"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...