// 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)<!ELEMENT\s+
((?'elname'\S+)\s+)
((?'rank'\d+)\s+)?
(?'tagOmit'
(?'start'[-oO])\s+
(?'end'[-oO])\s+
)?
(?'content'
(?'keyword'(ANY|EMPTY|CDATA|RDATA))|
(?'contentGrp' \(.*\)[*+?]?)
)
(?'exceptions'
(\s+\-(?'exclusion'\(.+\)))?
(\s+\+(?'inclusion'\(.+\)))?
)
\s*>").unwrap();
let string = "<!ELEMENT FTNOTE - - ((PARA | PARA-EFF-GROUP | PARA-EFF-CHOICE | TABLE | UN-LIST | NOTE | TABLE-EFF-GROUP | TABLE-EFF-CHOICE)+)
-(FTNOTE | NOTE | TABLE | GROUND-TEST | CORRECTIVE-ACTION)>
<!ELEMENT ENTRY - - (WARNING | CAUTION | NOTE | (PARA | UN-LIST | PARA-EFF-GROUP | PARA-EFF-CHOICE)*)
-(ENTRY | GRAPHIC-COLLECTION)
+(INFOMARK | FTNOTE-REF)>
<!ELEMENT COLSPEC - o EMPTY>
<!ELEMENT TGROUP - - (COLSPEC+, THEAD?, TBODY)>
<!ELEMENT TABLE - - (TITLE?, TGROUP, FTNOTE*)
-(TABLE | TABLE-NO-TITLE | GROUND-TEST | CORRECTIVE-ACTION)
+(INFOMARK | INCLUDED-SUBDOC | INCLUDED-SOURCE-DATA | EFF-NONE)>";
// 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/