// include the latest version of the regex crate in your Cargo.toml
extern crate regex;
use regex::Regex;
fn main() {
let regex = Regex::new(r#"air_temp": \K[\d.]+"#).unwrap();
let string = " {
\"observations\": {
\"notice\": [
{
\"copyright\": \"Copyright Commonwealth of Australia 2017, Bureau of Meteorology. For more information see: http://www.bom.gov.au/other/copyright.shtml http://www.bom.gov.au/other/disclaimer.shtml\",
\"copyright_url\": \"http://www.bom.gov.au/other/copyright.shtml\",
\"disclaimer_url\": \"http://www.bom.gov.au/other/disclaimer.shtml\",
\"feedback_url\": \"http://www.bom.gov.au/other/feedback\"
}
],
\"header\": [
{
\"refresh_message\": \"Issued at 12:11 pm EST Tuesday 11 July 2017\",
\"ID\": \"IDN60901\",
\"main_ID\": \"IDN60902\",
\"name\": \"Canberra\",
\"state_time_zone\": \"NSW\",
\"time_zone\": \"EST\",
\"product_name\": \"Capital City Observations\",
\"state\": \"Aust Capital Territory\"
}
],
\"data\": [
{
\"sort_order\": 0,
\"wmo\": 94926,
\"name\": \"Canberra\",
\"history_product\": \"IDN60903\",
\"local_date_time\": \"11/12:00pm\",
\"local_date_time_full\": \"20170711120000\",
\"aifstime_utc\": \"20170711020000\",
\"lat\": -35.3,
\"lon\": 149.2,
\"apparent_t\": 5.7,
\"cloud\": \"Mostly clear\",
\"cloud_base_m\": 1050,
\"cloud_oktas\": 1,
\"cloud_type_id\": 8,
\"cloud_type\": \"Cumulus\",
\"delta_t\": 3.6,
\"gust_kmh\": 11,
\"gust_kt\": 6,
\"air_temp\": 9.0,
\"dewpt\": 0.2,
\"press\": 1032.7,
\"press_qnh\": 1031.3,
\"press_msl\": 1032.7,
\"press_tend\": \"-\",
\"rain_trace\": \"0.0\",
\"rel_hum\": 54,
\"sea_state\": \"-\",
\"swell_dir_worded\": \"-\",
\"swell_height\": null,
\"swell_period\": null,
\"vis_km\": \"10\",
\"weather\": \"-\",
\"wind_dir\": \"WNW\",
\"wind_spd_kmh\": 7,
\"wind_spd_kt\": 4
},
{
\"sort_order\": 1,
\"wmo\": 94926,
\"name\": \"Canberra\",
\"history_product\": \"IDN60903\",
\"local_date_time\": \"11/11:30am\",
\"local_date_time_full\": \"20170711113000\",
\"aifstime_utc\": \"20170711013000\",
\"lat\": -35.3,
\"lon\": 149.2,
\"apparent_t\": 4.6,
\"cloud\": \"Mostly clear\",
\"cloud_base_m\": 900,
\"cloud_oktas\": 1,
\"cloud_type_id\": 8,
\"cloud_type\": \"Cumulus\",
\"delta_t\": 2.9,
\"gust_kmh\": 9,
\"gust_kt\": 5,
\"air_temp\": 7.3,
\"dewpt\": 0.1,
\"press\": 1033.1,
\"press_qnh\": 1031.7,
\"press_msl\": 1033.1,
\"press_tend\": \"-\",
\"rain_trace\": \"0.0\",
\"rel_hum\": 60,
\"sea_state\": \"-\",
\"swell_dir_worded\": \"-\",
\"swell_height\": null,
\"swell_period\": null,
\"vis_km\": \"10\",
\"weather\": \"-\",
\"wind_dir\": \"NW\",
\"wind_spd_kmh\": 4,
\"wind_spd_kt\": 2
}
]
}
}";
// result will be a tuple containing the start and end indices for the first match in the string
let result = regex.captures(string);
let (start, end) = match result {
Some((s, e)) => (s, e),
None => {
// ...
}
};
println!("{}", &string[start, end]);
}
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 Rust, please visit: https://docs.rs/regex/latest/regex/