// 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"(?mx)# Find the company at the beginning of the line, always:
^ COMPANY:(?P<company>[^\s|]+(?:[ ][^\s|]+)*)
# After COMPANY, any of PERSON or PRODUCT may be matched:
|\G [^\S\r\n]*[|][^\S\r\n]*
PERSON:(?P<person>[^\s|]+(?:[ ][^\s|]+)*)
|\G [^\S\r\n]*[|][^\S\r\n]*
PRODUCT:(?P<product>[^\s|]+(?:[ ][^\s|]+)*)").unwrap();
let string = "COMPANY:Pizza
COMPANY:Pizza
COMPANY:Pizza | PERSON:Sid Sanders | PERSON:Louise Lane | PRODUCT:Bananas
COMPANY:Pizza |PERSON:Sid Sanders | PERSON:Louise Lane| PRODUCT:Bananas
COMPANY:Pizza| PERSON:Sid Sanders | PERSON:Louise Lane|PRODUCT:Bananas
COMPANY:Pizza|PERSON:Sid Sanders | PERSON:Louise Lane |PRODUCT:Bananas
COMPANY:Food Heaven
COMPANY:Food 123 Heaven
COMPANY:Food Heaven | PRODUCT:Bananas | PERSON:Sid Sanders | PERSON:Louise Lane
COMPANY:Food Heaven123| PRODUCT:Bananas |PERSON:Sid Sanders | PERSON:Louise Lane
COMPANY:Food Heaven| PERSON:Sid Sanders | PERSON:Louise Lane | PRODUCT:Bananas
COMPANY:Food Heaven|PERSON:Sid Sanders| PRODUCT:Bananas | PERSON:Louise Lane
COMPANY:Something Somewhere Anywhere - There
COMPANY:Something 1 Soöômewhere Anywhere There
COMPANY:Something 2 Somewhere - Anywhere There | PERSON:Sid Sanders | PRODUCT:Bananas| PERSON:Louise Lane
COMPANY:Something - Somewhere Anywhere There |PERSON:Sid Sanders| PRODUCT:Bananas | PERSON:Louise Lane
COMPANY:- Something 3 Somewhere Anywhere There| PERSON:Sid Sanders |PRODUCT:Bananas | PERSON:Louise Lane
COMPANY:Something Somewhere 4 Anywhere There|PERSON:Sid Sanders | PRODUCT:Bananas | PERSON:Louise Lane
# Should not match:
|PERSON:Fred Rogers
| PRODUCT:Mr. Roger's Neighborhood
# Should start matching again:
COMPANY:Fred Rogers Productions |PERSON:Fred Rogers |PRODUCT:Mr. Roger's Neighborhood
";
// result will be an iterator over tuples containing the start and end indices for each match in the string
let result = regex.captures_iter(string);
for mat in result {
println!("{:?}", mat);
}
}
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/