// 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#"(?si)name\s+?z155e4d1dde106c_point_test.+?(?<!meta)data\s*".+?from\s+([^\s]+?)""#).unwrap();
let string = "MAP
CONFIG \"MS_ERRORFILE\" \"/srv/mapservices/mapfiles/tmp/155e4d1dde106c.log\"
DEBUG 5
IMAGETYPE PNG
SIZE 1600 800
STATUS ON
WEB
METADATA
\"wms_title\" \"Generated_Mapfile\"
\"wms_onlineresource\" \"http://142.207.151.5/cgi-bin/mapserv?map=/srv/portal/www/Mapservices/mapfiles/TSAZones.map&version=1.0.0&service=wms\"
\"wms_srs\" \"EPSG:3005 EPSG:4269 EPSG:3857\"
\"wms_enable_request\" \"*\"
\"wms_feature_info_mime_type\" \"text/html\"
END
QUERYFORMAT text/html
END
PROJECTION
\"init=epsg:3005\"
END
OUTPUTFORMAT
NAME png
DRIVER AGG/PNG
MIMETYPE \"image/png\"
IMAGEMODE RGBA
EXTENSION \"png\"
FORMATOPTION \"GAMMA=0.75\"
TRANSPARENT ON
END
LAYER
DEBUG 5
NAME z155e4d1dde106c_point_test
DUMP TRUE
TEMPLATE \"querytemplate.html\"
PROJECTION
\"init=epsg:3005\"
END
METADATA
\"wms_srs\" \"EPSG:3005\"
\"title\" \"TSA Zones\"
\"wms_title\" \"TSA Zones\"
\"wms_include_items\" \"all\"
\"gml_include_items\" \"all\"
END
TYPE POINT
CONNECTIONTYPE POSTGIS
CONNECTION \"host=127.0.0.1 dbname=stewardship user=portal_readwrite password=portal_readwrite\"
DATA \"wkb_geometry from z155e4d1dde106c_point_test\"
CLASS
STYLE
COLOR 59 189 57
OUTLINECOLOR 147 155 48
OPACITY 100
END
END
END
LAYER
DEBUG 5
NAME z155e4d1dde106c_poly_test1
DUMP TRUE
TEMPLATE \"querytemplate.html\"
PROJECTION
\"init=epsg:3005\"
END
METADATA
\"wms_srs\" \"EPSG:3005\"
\"title\" \"TSA Zones\"
\"wms_title\" \"TSA Zones\"
\"wms_include_items\" \"all\"
\"gml_include_items\" \"all\"
END
TYPE POLYGON
CONNECTIONTYPE POSTGIS
CONNECTION \"host=127.0.0.1 dbname=stewardship user=portal_readwrite password=portal_readwrite\"
DATA \"wkb_geometry from z155e4d1dde106c_poly_test1\"
CLASS
STYLE
COLOR 121 71 143
OUTLINECOLOR 96 133 94
OPACITY 100
END
END
END
END";
// 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/