$re = '/(?<="3h":|"3h":)((d+)|\d+\.\d+)(?=)/';
$str = '{"city":{"id":1217734,"name":"Boysun","findname":"BOYSUN","country":"UZ","coord":{"lon":67.198608,"lat":38.206108},"zoom":8,"langs":[{"link":"http:\\/\\/en.wikipedia.org\\/wiki\\/Boysun"},{"ru":"Бойсун"}]},"time":1394871628,"main":{"temp":274.74,"temp_min":274.74,"temp_max":274.74,"pressure":823.92,"sea_level":1035.91,"grnd_level":823.92,"humidity":98},"wind":{"speed":0.6,"deg":97.004},"clouds":{"all":92},"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}],"rain":{"3h":0.1},"snow":{"3h":0.85}}';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php