これが私のコードです:
1. "special_filter,|filter_str,(&(a=1)(c=11)(p=c=11,o=m,d=4))"
2.{ "a" =>"1", "c" => "11" , "p" => "c=11,o=m,d=4"}
これが私のコードです:
1. "special_filter,|filter_str,(&(a=1)(c=11)(p=c=11,o=m,d=4))"
2.{ "a" =>"1", "c" => "11" , "p" => "c=11,o=m,d=4"}
#!/usr/bin/ruby
string = "special_filter,|filter_str,(&(a=1)(c=11)(p=c=11,o=m,d=4))"
hash = {}
string.slice(/\(&.*\)/).split(")").each do |match|
match.tr("(&","").split("=",2).each_slice(2) { |key, value| hash[key] = value }
end
1行目:開始文字列を使用して変数stringを設定します。
string = "special_filter,|filter_str,(&(a=1)(c=11)(p=c=11,o=m,d=4))"
2行目:入力する空のハッシュを使用して変数hashを設定します。
hash = {}
3行目:
string.slice(/\(&.*\)/) => "(&(a=1)(c=11)(p=c=11,o=m,d=4))"
正規表現はスラッシュで予約されています(/ regexpはここにあります/)。括弧は正規表現で特別な意味を持つため、円記号でエスケープする必要があります。&は文字列の&と一致します。正規表現では、。任意の文字を意味します。*は、前の文字がないか無制限であることを意味します。したがって、この正規表現は(&)および(&fjalsdkfj)と一致します。
string.slice(/\(&.*\)/).split(")") => ["(&(a=1", "(c=11", "(p=c=11,o=m,d=4"]
string.slice(/\(&.*\)/).split(")").each do |match|
4行目:
match.tr("(&","")
=
最初の記号を使用して、1回分割しますmatch.tr("(&","").split("=",2)
match.tr("(&","").split("=",2).each_slice(2) { |key, value| hash[key] = value }
これを試してみてください。
Hash[*string[/\&.*/].tr("&(","").split(")").map{|i| i.split("=",2)}.flatten]
@Connerのソリューションから得られたいくつかのアイデア;)
@cornerに感謝します。これまで使用したことのない関数をいくつか知ることができました。